Сначала позвольте мне извиниться, потому что я не совсем уверен, в чем заключается ваша проблема в данный момент, но я полагаю, что она связана с тем, как вы вызываете массив, и у меня есть следующие предложения:
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
printf
всегда должна быть отделена от фактического содержимого.(printf '%s,%s,%s\n' 'table_name' 'file_name' 'full_path'
)read
почти всегда следует использовать аргумент -r
. Это позволит ему читать escape-символ \
как литерал ${array[@]}
(весь массив )или${array[0]}
(первый элемент в массиве ). Когда вы вызываете его как $array
, вы всегда получаете только первый элемент. n
, которая будет увеличиваться на каждой итерации вашего цикла. примечание :Похоже, что здесь вообще нет необходимости использовать массив. Если ваш код не будет использовать extract
в других местах, вы можете просто установить его как переменную и сбрасывать его на каждой итерации цикла.
Также обратите внимание :Ваш вопрос помечен как "скрипт оболочки -", но массивы не указаны в стандарте POSIX, поэтому, хотя большинство версий /bin/sh их поддерживают, нет никакой гарантии, что ваша поддерживает.
Вы можете исключить столбец 1
for file in *.m4a; do
tageditor get artist -f "$file" | awk '/Artist/{$1=""}1'
done
Это то, что вы пытаетесь сделать (, используя 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
for file in *.m4a; do
tageditor get artist -f "$file" | sed -r "s/.* \s+//g"
done