使用gnu parallel处理带标题的CSV文件

dan*_*boo 6 csv parallel-processing shell gnu

是否有可能以一种重复第一行原始输入到每个子作业的STDIN的方式调用gnu parallel?

我有一个CSV文件,顶部有一个标题行.例如:

> cat large.csv
id,count
abc,123
def,456
Run Code Online (Sandbox Code Playgroud)

我有一个工具可以按名称而不是位置提取列:

> csv_extract large.csv count
123
456
Run Code Online (Sandbox Code Playgroud)

我可以将这些值按顺序汇总为:

> csv_extract large.csv count | awk '{ SUM += $1 } END { print SUM }'
579
Run Code Online (Sandbox Code Playgroud)

我拥有的实际文件要大得多,操作比求和更复杂,但同样的原则也适用.我想使用gnu parallel来处理文件,但我不知道是否可以告诉gnu parallel为每个作业重复CSV头.

理想情况下,我可以运行以下操作:

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

我已经编写了上面的--repeat-first-line选项来表示我无法弄清楚的功能.我观看了YouTube视频,并阅读了手册页,但是如果可能的话,我只是无法看到它是如何完成的.

谢谢!

  • danboo

Ole*_*nge 6

今天你可以--skip-first-line使用echo以下方法添加标题:

seq 10 | parallel --skip-first-line --pipe '(echo hea,der; cat) | my_prog'
Run Code Online (Sandbox Code Playgroud)

在将来的版本中,您将拥有选项'--header',它将是与标题末尾匹配的正则表达式(例如:'\n'表示一行或'\n.*\n'表示两行或'' ---'包括第一个---)

- 编辑 -

最新版本的GNU Parallel现在可以:

parallel --pipe --header : my_program
Run Code Online (Sandbox Code Playgroud)