обработка заголовочного 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