обработка заголовочного CSV-файла с помощью GNU parallel
можно ли вызвать gnu parallel таким образом, чтобы он повторил первую строку исходного ввода в STDIN каждого дочернего задания?
у меня есть файл CSV, который содержит строку заголовка вверху. Например:
> cat large.csv
id,count
abc,123
def,456
у меня есть инструмент, который может извлекать столбцы по имени, а не позиция:
> csv_extract large.csv count
123
456
Я могу суммировать значения последовательно как:
> csv_extract large.csv count | awk '{ SUM += } END { print SUM }'
579
фактический файл у меня намного больше, и операция более сложная, чем подведем итоги, но применимы те же принципы. Я хотел бы использовать gnu parallel для обработки файла, но я не знаю, можно ли сказать gnu parallel повторить заголовок CSV для каждого задания.
В идеале я мог бы запустить операцию с чем-то вроде:
> cat large.csv | parallel --pipe --repeat-first-line "csv_extract /dev/stdin count | awk '{ SUM += } END { print SUM }'"
579
Я составил -- repeat-first-line опция выше, чтобы представить функциональность, которую я не могу понять. Я смотрел видео на YouTube и читал man-страницу, но я просто не могу видеть, как это можно сделать, если вообще возможно.
спасибо!
- danboo
1 ответов
сегодня вы можете --skip-first-line
и добавьте заголовок, используя echo
:
seq 10 | parallel --skip-first-line --pipe '(echo hea,der; cat) | my_prog'
в будущей версии у вас будет опция '--header' , которая будет регулярным выражением, которое соответствует концу вашего заголовка (e.g: '\n 'для одной строки или' \n.*\n 'для двух строк или' - - - ' для До и включая первый - - -)
-- Edit --
новейшая версия GNU Parallel теперь может делать:
parallel --pipe --header : my_program