Gawk和GNU是否与单个文件并行?
使用Gawk 4.1中的以下脚本,根据其中的日期列,将多个源文件转换并组合为较少的csv文件,我尝试使用GNU Parallel来加快速度: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 >>
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和并行运行的作业数之间的作业插槽号。永远不会有两个作业在同一时间以相同的作业槽号运行。“-感谢您的指针!