Как использовать awk для извлечения только названия группы из выходных данных tageditor?

Сначала позвольте мне извиниться, потому что я не совсем уверен, в чем заключается ваша проблема в данный момент, но я полагаю, что она связана с тем, как вы вызываете массив, и у меня есть следующие предложения:

n=0
printf '%s,%s,%s\n' 'table_name' 'file_name' 'full_path' >> export_list.txt
while read -r table
do
    extract[$n]=$(egrep -ilrs "$table" /path/to/file | egrep -i tag | egrep -v backup)
    file_name=$(basename "${extract[$n]}")
    printf '%s,%s,%s\n' "$table" "$file_name" "${extract[$n]}" >> export_list.txt
    n=$((n+1))
done < table_list.txt
  1. Строка формата printfвсегда должна быть отделена от фактического содержимого.(printf '%s,%s,%s\n' 'table_name' 'file_name' 'full_path')
  2. При использовании readпочти всегда следует использовать аргумент -r. Это позволит ему читать escape-символ \как литерал
  3. всегда двойные кавычки ваших переменных. Из-за это и это .
  4. Существует специальный синтаксис, который необходимо использовать при обращении к массиву/элементу массива. То есть${array[@]}(весь массив )или${array[0]}(первый элемент в массиве ). Когда вы вызываете его как $array, вы всегда получаете только первый элемент.
  5. Из-за вышеизложенного нам нужен способ гарантировать, что мы захватываем правильный элемент массива на каждой итерации. Для этого я добавил переменную n, которая будет увеличиваться на каждой итерации вашего цикла.

примечание :Похоже, что здесь вообще нет необходимости использовать массив. Если ваш код не будет использовать extractв других местах, вы можете просто установить его как переменную и сбрасывать его на каждой итерации цикла.

Также обратите внимание :Ваш вопрос помечен как "скрипт оболочки -", но массивы не указаны в стандарте POSIX, поэтому, хотя большинство версий /bin/sh их поддерживают, нет никакой гарантии, что ваша поддерживает.

1
03.09.2021, 02:59
3 ответа

Вы можете исключить столбец 1

for file in *.m4a; do
    tageditor get artist -f "$file" | awk '/Artist/{$1=""}1'
done
0
03.09.2021, 07:33

Это то, что вы пытаетесь сделать (, используя cat fileвместо tageditor..., которого у меня нет )?

$ cat file | awk 'sub(/^Artist[[:space:]]+/,""){sub(/,.*/,""); print}'
Periphery
Meshuggah
Varials
Cannibal Corpse
Lamb of God
Ingested
Linkin Park
Car Bomb
Whitechapel
Divine Destruction
Ingested

Не используйте /Artist/без привязки, так как это будет соответствовать в любом месте строки, а не только тогда, когда Artistявляется первой строкой:

$ printf 'Foo\tBob The Artist\nArtist\tLamb of God\nArtistically\tIs how we do it\n'
Foo     Bob The Artist
Artist  Lamb of God
Artistically    Is how we do it

$ printf 'Foo\tBob The Artist\nArtist\tLamb of God\nArtistically\tIs how we do it\n' |
    awk '/Artist/'
Foo     Bob The Artist
Artist  Lamb of God
Artistically    Is how we do it

$ printf 'Foo\tBob The Artist\nArtist\tLamb of God\nArtistically\tIs how we do it\n' |
    awk '/^Artist[[:space:]]/'
Artist  Lamb of God
1
03.09.2021, 14:11
for file in *.m4a; do
    tageditor get artist -f "$file" | sed -r "s/.* \s+//g"
done
1
08.09.2021, 19:39

Теги

Похожие вопросы