LINUX.ORG.RU

удаление символов в таблице

 , ,


0

1

Доброго времени. Подскажите пожалуйста глупой женщине: Есть таблица формата /home/users/user/desktop;320;1111-1111-1111-1111-1111song.mp3 нужно по итогу получить таблицу но в третьей колонке удалить несколько символов с хвоста при этом чтоб остальная таблица осталась неизменной /home/users/xander/desktop;320;1111-1111-1111-1111-1111. пробовала и cut и awk но по итогу получаю только одну колонку а надо все


STRING='/home/users/xander/desktop;320;1111-1111-1111-1111-1111.mp3'

echo ${STRING::-4}

# Если версия баша древняя, то можно вот так:

LENGTH=${#STRING}
echo ${STRING::LENGTH-4}
shell-script ★★★★★
()
Последнее исправление: shell-script (всего исправлений: 1)
$ echo "/home/users/user/desktop;320;1111-1111-1111-1111-1111.song.mp3" | while IFS=";" read A B C; do echo "$A -- $B -- ${C%.*}" ; done
/home/users/user/desktop -- 320 -- 1111-1111-1111-1111-1111.song
Kroz ★★★★★
()
Ответ на: комментарий от Kroz
echo "/home/users/user/desktop;320;1111-1111-1111-1111-1111.song.md.jpeg" | awk -F\; -vOFS=";" '{$3=gensub(/(.+\.).+/, "\\1", "", $3)}1'

/home/users/user/desktop;320;1111-1111-1111-1111-1111.song.md.

Еще варианты? :)

Yorween
()

пробовала и...

Сомнительно, но:

$ echo "/home/users/user/desktop;320;1111-1111-1111-1111-1111song.mp3" | awk -Fsong\.mp3 '{print $1}'
/home/users/user/desktop;320;1111-1111-1111-1111-1111
anonymous
()
Ответ на: комментарий от Darja

соответственно обрезка по количеству символов и определимому содержанию не подходит

Darja
() автор топика
Ответ на: комментарий от Darja

окончание всегда разной длины

Как скажешь:

$ echo "/home/users/user/desktop;320;1111-1111-1111-1111-1111song.mp3" | awk -F\; '{print $1 ";" $2 ";" substr($3,1,24)}'
/home/users/user/desktop;320;1111-1111-1111-1111-1111
anonymous
()
Ответ на: комментарий от Yorween

Еще варианты? :)

Объяснить почему мой пример тебе не подходит, так как в моем понимаю делает то, что тебе нужно. Не твой с awk, а мой с read.

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Не твой с awk, а мой с read.

Read хорош для случаев, когда необходим построчный вывод (например, при работе с iconv), а для данного случая как то особой надобности в нём нет.

anonymous
()
Ответ на: комментарий от anonymous

этот вариант значительно помог, но теперь еще более непонятная мне задача имеем таблицу вида /home/users/user/desktop;320;1111-1111-1111-1111-1111song.mp3 , вырезала отдельно таблицу одной колонкой 1111-1111-1111-1111-1111 и нужно как то эту колонку добавить в таблицу /home/users/user/desktop;320;1111-1111-1111-1111-1111song.mp3 вначале ее чтоб получить 1111-1111-1111-1111-1111;/home/users/user/desktop;320;1111-1111-1111-1111-1111song.mp3

Darja
() автор топика
Ответ на: комментарий от Yorween

да вот пытаюсь да что то не очень получается. банальные cut , а дальше че то неочень

Darja
() автор топика
Ответ на: комментарий от Darja

вырезала отдельно

Зачем?:

$ echo "/home/users/user/desktop;320;1111-1111-1111-1111-1111song.mp3" | awk -F\; '{print substr($3,1,24) ";" $1 ";" $2 ";" $3}'
1111-1111-1111-1111-1111;/home/users/user/desktop;320;1111-1111-1111-1111-1111song.mp3

Ты точно не троль?

anonymous
()
Ответ на: комментарий от anonymous

я не могла придумать как лучше сделать поэтому было два варианта решения вырезать отдельно или обрезать с хвоста. я наверное как то излагаю неправильно , это разные таблицы по структуре они одинаковые , мне нужно будет их в итоге сравнивать по вот этим 1111-1111.... и потом выгружать несовпадающие строки

Darja
() автор топика
Ответ на: комментарий от Darja

это не из одной таблицы

$ echo "1111-1111-1111-1111-1111" > 1.txt
$ echo "/home/users/user/desktop;320;1111-1111-1111-1111-1111song.mp3" > 2.txt
$ paste -d\; 1.txt 2.txt 
1111-1111-1111-1111-1111;/home/users/user/desktop;320;1111-1111-1111-1111-1111song.mp3

Ты ТОЧНО не троль?

anonymous
()
Ответ на: комментарий от anonymous

я блин точно не троль, я уже запуталась вся чо мне нужно было изначально и что блин делаю

Darja
() автор топика
Ответ на: комментарий от anonymous

в итоге по сути мне нужно было именно $ echo «/home/users/user/desktop;320;1111-1111-1111-1111-1111song.mp3» | awk -F\; '{print substr($3,1,24) ";" $1 ";" $2 ";" $3}' 1111-1111-1111-1111-1111;/home/users/user/desktop;320;1111-1111-1111-1111-1111song.mp3 Я ТУПИЛА!

Darja
() автор топика
Ответ на: комментарий от anonymous

Read хорош для случаев, когда необходим построчный вывод (например, при работе с iconv), а для данного случая как то особой надобности в нём нет.

Надобности? В awk надобности тоже нет. В данном случае что read что awk одинаково подходят.
Лично мне с read более читабельней.

Kroz ★★★★★
()
Ответ на: комментарий от Darja

ну было бы интересно, с read не приходилось пока сталкиваться

Я тебе очень рекомендую почитать вот это: https://www.opennet.ru/docs/RUS/bash_scripting_guide/ (сразу качай «Архив руководства в html-формате (~380Кб)» - там версия на одной HTML странице, так удобней). Откроешь для себя новый прекрасный мир.

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Знакома с этим ресурсом, буквально сегодня нашла для себя полезную команду, но в итоге она не совсем мне подошла

Darja
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.