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

时间:2011-11-04 20:38:42

标签: shell csv parallel-processing gnu

是否有可能以一种方式调用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 += $1 } END { print SUM }'
579

我拥有的实际文件要大得多,操作比求和更复杂,但同样的原则也适用。我想使用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

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

谢谢!

  • danboo

1 个答案:

答案 0 :(得分:6)

今天您可以--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