我有一個 CSV 檔案,其中填充了最后 4 列中的 1-4 的可變數量。但是,缺少值的行沒有用逗號填充,因此程式無法正確解釋 CSV。如何在末尾添加缺少的逗號?請記住,這是一個非常大的 CSV 檔案(500m 行,200 gb),因此它需要高效。
錯誤檔案示例:
col1,col2,col3,col4
val2,val3,val5,val6
val2
val2,val3
val2,val4,val8,val9
期望結果的示例:
col1,col2,col3,col4
val2,val3,val5,val6
val2,,,
val2,val3,,
val2,val4,val8,val9
uj5u.com熱心網友回復:
使用 GNU 強制 4 列awk:
awk 'BEGIN{FS=OFS=","} {NF=4; print}' file
輸出:
col1,col2,col3,col4 val2,val3,val5,val6 val2,,, val2,val3,, val2,val4,val8,val9
請參閱:8 個強大的 Awk 內置變數——FS、OFS、RS、ORS、NR、NF、FILENAME、FNR
uj5u.com熱心網友回復:
使用米勒并運行
mlr --csv --ragged cat input.csv >output.csv
你有
col1,col2,col3,col4
val2,val3,val5,val6
val2,,,
val2,val3,,
val2,val4,val8,val9
uj5u.com熱心網友回復:
如果在石頭上刻蝕的列數為 4,那么您可以使用以下 GNU sed,讓file.txt內容為
col1,col2,col3,col4
val2,val3,val5,val6
val2
val2,val3
val2,val4,val8,val9
val10,val11,val12
然后
sed -e 's/^\([^,]*\)$/\1,,,/' -e 's/^\([^,]*,[^,]*\)$/\1,,/' -e 's/^\([^,]*,[^,]*,[^,]*\)$/\1,/' file.txt
輸出
col1,col2,col3,col4
val2,val3,val5,val6
val2,,,
val2,val3,,
val2,val4,val8,val9
val10,val11,val12,
說明:我這里準備了3個運算式,排列成每行最多使用1個。第一種使用單個欄位(沒有,在行中)描述情況,導致逐行替換,,,(即追加,,,),第 2 種使用 2 個欄位(單個,)描述導致添加的,,情況,第 3 種使用 3 個欄位(兩個,)導致添加的情況的,。
(注意:我在檔案中添加了額外的行用于 3 列的測驗用例)
uj5u.com熱心網友回復:
這可能對您有用(GNU sed):
sed 's/$/,,,/;s/,//4g' file
在行尾添加三個逗號,然后洗掉第四個或更多逗號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/451493.html
上一篇:如何根據正則運算式模式將檔案移動到新檔案夾(尚未創建)?
下一篇:在getopt中處理glob
