2016-08-27 52 views
1

使用與Gawk的4.1以下腳本轉換和多個源文件合併到基於日期列中,我試圖使用GNU並行加速沿東西更少的CSV文件:Gawk和GNU並行到單個文件?

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有沒有辦法讓我可以安全地讓多個Awks同時寫入文件?

同樣的問題也會出現Mawk V1.3.4

+0

我在你的代碼中看不到任何與'parallel'有關的事情...... –

+2

如果所有'awk'進程並行運行並寫入相同的輸出文件,你一定會弄得一團糟。你能寫輸出文件的名字是否加上「parallel」作業號碼,然後把它們與'cat'結合起來嗎? –

回答

2

我暗指沿着這些線路在我的評論的解決方案:

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 
+0

這使我得到了插槽的{%}:「作業插槽編號,這個替換字符串將被作業的插槽編號替換爲1和作業數量之間並行運行的數量,永遠不會有2個作業同時運行具有相同的作業槽號。「 - 感謝指針! – MattK

+0

https://www.gnu.org/software/parallel/man.html#OPTIONS – MattK