是否有可能以一种方式调用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视频,并阅读了该手册页,但如果可能的话,我还是无法看到它是如何完成的。
谢谢!
答案 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