我正在嘗試從.csv變數與某個識別符號匹配的檔案中提取行。這是一個示例資料集 ( myfile.csv)
id,x,y,z
A01,1,5,7
A02,4,4,7
B01,1,6,6
A01,5,7,4
A01,4,8,4
C02,3,1,3
A01,1,2,3
我可以使用以下內容:
awk -F',' '{if($1 == "A01") print}' myfile.csv > outfile.csv
或者
awk -F',' '{if($1 == "A01") print > "outfile.csv" }' myfile.csv
這將導致outfile.csv:
A01,1,5,7
A01,5,7,4
A01,4,8,4
A01,1,2,3
但是,我正在處理一個非常大的資料集(200Gb),并且在運行時,我必須等待awk完成才能輸出到outfile.csv.
有沒有辦法awk在遇到正確的陳述句時列印到檔案(即檔案作為awk行程更新)
uj5u.com熱心網友回復:
像大多數工具一樣,awk 正在緩沖它的輸出以提高效率,所以只需告訴它在每次列印后重繪 它的緩沖區:
awk -F',' '$1 == "A01"{ print; fflush() }' myfile.csv > outfile.csv
uj5u.com熱心網友回復:
嘗試運行一次以下命令。所以我在這里做的是:盡管在每種情況下都進行了重定向,但在 awk 程式完成其運行后執行一次輸出重定向到輸出檔案。我很確定這與您當前的命令相比應該足夠快,盡管這是合理的警告;沒有測驗過。
awk -F',' '{if($1 == "A01") print}' myfile.csv > "outputfile.csv"
或無需明確提及 if 條件和列印,默認情況下,如果其中的 TRUE 條件awk列印該行作為默認操作,則上述可以縮短為以下內容:
awk -F',' '($1 == "A01")' myfile.csv > "outputfile.csv"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/383852.html
