Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 使用gnu并行处理头CSV文件_Shell_Csv_Parallel Processing_Gnu - Fatal编程技术网

Shell 使用gnu并行处理头CSV文件

Shell 使用gnu并行处理头CSV文件,shell,csv,parallel-processing,gnu,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

是否有可能以一种方式调用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视频,也看过手册页,但如果可能的话,我就是不知道怎么做

谢谢

  • 丹布
今天,您可以使用
--跳过第一行
并使用
echo添加标题

seq 10 | parallel --skip-first-line --pipe '(echo hea,der; cat) | my_prog'
在将来的版本中,您将有选项“--header”,它将是一个与标题结尾匹配的regexp(例如:“\n”表示一行,或“\n.\n”表示两行,或“--”表示第一行之前(包括第一行)的regexp)

--编辑--

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

parallel --pipe --header : my_program

您能否单独运行
parallel
,在处理完成时将头添加到所有文件中?或者实际上是一个
for
循环,如果您控制
并行
输出文件的位置和名称。祝你好运我期待着使用
--header
选项。感谢您的
echo
想法。虽然它对我的使用还不够通用,但我至少可以对磁盘文件使用类似的东西:
cat large.csv |并行--跳过第一行--pipe'(head-1 large.csv;cat)| my_prog'