обработка заголовочного файла CSV с помощью GNU параллельно - PullRequest
6 голосов
/ 05 ноября 2011

Возможно ли вызвать gnu параллельно таким образом, чтобы оно повторяло первую строку исходного ввода в 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 += $1 } END { print SUM }'
579

Фактический файл, который у меня есть, намного больше, и операция сложнее, чем суммирование, но применимы те же принципы. Я хотел бы использовать gnu параллельно для обработки файла, но я не знаю, можно ли сказать gnu параллельно повторять заголовок CSV для каждого задания.

В идеале я мог бы запустить операцию с чем-то вроде:

> cat large.csv | parallel --pipe --repeat-first-line "csv_extract /dev/stdin count | awk '{ SUM += $1 } END { print SUM }'"
579

Я выдвинул вариант - repeat-first-line выше, чтобы представить функциональность, которую я не могу понять. Я смотрел видео на YouTube и читал справочную страницу, но просто не понимаю, как это можно сделать, если это вообще возможно.

Спасибо!

  • danboo

1 Ответ

6 голосов
/ 22 ноября 2011

Сегодня вы можете --skip-first-line и добавить заголовок, используя echo:

seq 10 | parallel --skip-first-line --pipe '(echo hea,der; cat) | my_prog'

В будущей версии у вас будет опция '--header', которая будет регулярным выражением, соответствующим концувашего заголовка (например: '\ n' для одной строки или '\ n. * \ n' для двух строк или '---' для до и включая первую ---)

-Редактировать -

Новейшая версия GNU Parallel теперь может делать:

parallel --pipe --header : my_program
...