Необходимо было упомянуть страницу справочника tar, просто путем выдачи команды:
man tar
Для Вашего конкретного вопроса вот хороший пример того, как сделать это:
find /informatica/dev/SrcFiles* -print0 -mtime +7 -and -size +1M | xargs -0 tar cjvf /mydir/mytarfile.tar.bz2
Таким образом, команду tar назовут только однажды, вместо того, чтобы быть названной каждый раз, когда файл найден. Заметьте -print0
и -0
аргументы. Это избежит разделения слова...
Кроме того, необходимо удостовериться, что архив не размещается в тот же каталог, в то время как его имя может подойти в шаблоне поиска. Вы получите ошибку при предположении, что Вы не можете добавить архив к себе!
Проблема заключается в том, что переменные оболочки (включая массивы) недоступны внутри awk
. Их необходимо явно передать с помощью параметра -v
. Более того, вы не можете передать весь массив, но вы можете поместить массив в одну переменную и разбить его внутри awk
:
awk -va="$(echo "${array[@]}")" 'BEGIN{OFS=FS=","; split(a,b," ")}{print $0,b[NR]}' input.csv
Это будет работать, пока у вас нет пробелов внутри элементов массива.
Нужно ли для этого использовать awk
? Утилита paste
была разработана именно для такого рода вещей. Предполагая, что array
является массивом оболочки:
array=(100 200)
printf "%s\n" "${array[@]}" | paste -d, input.csv - > output.csv
printf
просто помещает каждый член массива в новую строку. paste
затем вставляет вместе входные строки из input.csv и -
(то есть вывод по конвейеру из printf
), используя запятую в качестве разделителя.
Если ваш массив является файлом, разделенным новой строкой, например array.txt:
100
200
, тогда это еще проще:
paste -d, input.csv array.txt > output.csv