Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
Gawk和GNU是否与单个文件并行?_Awk_Gawk_Gnu Parallel - Fatal编程技术网

Gawk和GNU是否与单个文件并行?

Gawk和GNU是否与单个文件并行?,awk,gawk,gnu-parallel,Awk,Gawk,Gnu Parallel,使用Gawk 4.1中的以下脚本,根据其中的日期列,将多个源文件转换并组合为较少的csv文件,我尝试使用GNU Parallel来加快速度: BEGIN { FS="-"; OFS="," } { gsub(/\|/, ",", $7) # pipe to csv gsub(/,[^0-9]|,$/, ",0", $7) # null measures to zero print $1"-"$2"-"$3" "$4":00", $5, $6, $7 >>

使用Gawk 4.1中的以下脚本,根据其中的日期列,将多个源文件转换并组合为较少的csv文件,我尝试使用GNU Parallel来加快速度:

BEGIN { FS="-"; OFS="," }
{
    gsub(/\|/, ",", $7)  # pipe to csv
    gsub(/,[^0-9]|,$/, ",0", $7)  # null measures to zero
    print $1"-"$2"-"$3" "$4":00", $5, $6, $7 >> "out_" $1 $2 $3 ".csv"
}
然而,输出行以奇怪的方式组合在一起,字段值部分组合在一起。我尝试过并行选项的组合--group、-lb和-k,但并没有成功

有没有一种使用Gawk和Parallel的方法可以让多个AWK同时写入文件


Mawk v1.3.4也出现了同样的问题,我在评论中提到了一个类似于以下内容的解决方案:

parallel gawk -v job={#} -f ./script.awk {} ::: *.csv
其中
script.awk
除了逻辑之外还包含以下元素:

BEGIN{out="out_" job "-a-b-c.csv"; print out}
输出

out_1-a-b-c.csv
out_2-a-b-c.csv
out_3-a-b-c.csv
out_4-a-b-c.csv

在您的代码中,我看不到与
parallel
有任何关系……如果所有
awk
进程并行运行并写入相同的输出文件,您肯定会弄得一团糟。您是否可以写入名称前缀为
parallel
job number的输出文件,然后在末尾将它们与
cat
组合在一起?这使我找到了{%}作为插槽:“职位号。此替换字符串将替换为介于1和并行运行的作业数之间的作业插槽号。永远不会有两个作业在同一时间以相同的作业槽号运行。“-感谢您的指针!