Linux
用逗號替換下劃線並刪除 CSV 中的雙引號
我有一個 CSV 文件
input.csv "1_1_0_0_76" "1_1_0_0_77" "1_1_0_0_78" "1_1_0_0_79" "1_1_0_0_80" "1_1_0_0_81" "1_1_0_0_82" "1_1_0_0_83" "1_1_0_0_84" "1_1_0_0_85"
…………. 等等。
我需要將此 CSV 文件轉換為
result.csv 1,1,0,0,76 1,1,0,0,77 1,1,0,0,78 1,1,0,0,79 1,1,0,0,80 1,1,0,0,81 1,1,0,0,82 1,1,0,0,83 1,1,0,0,84 1,1,0,0,85
更簡單的方法是使用
tr
$ tr '_' ',' < input.csv | tr -d '"' 1,1,0,0,76 1,1,0,0,77 1,1,0,0,78
其工作方式是
tr
採用兩個參數 - 要替換的字元集及其替換。在這種情況下,我們只有 1 個字元的集合。我們通過 shell 操作符重定向input.csv
inputtr
的 stdin 流<
,並將結果輸出通過管道傳遞tr -d '"'
給刪除雙引號。但
awk
也能做到。$ cat input.csv "1_1_0_0_76" "1_1_0_0_77" "1_1_0_0_78" $ awk '{gsub(/_/,",");gsub(/"/,"")};1' input.csv 1,1,0,0,76 1,1,0,0,77 1,1,0,0,78
它的工作方式略有不同:awk 逐行讀取每個文件,每個內聯腳本都是
/Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
. 這裡我們沒有模式,所以它意味著為每一行執行程式碼塊。gsub()
函式用於行內的全域替換,因此我們用它來用逗號替換下劃線,用空字元串替換雙引號(有效地刪除字元)。1
代替缺少程式碼塊的模式匹配,預設情況下僅列印該行;換句話說,程式碼塊gsub()
完成工作並1
列印結果。使用 shell 重定向 (
>
) 將輸出發送到新文件:awk '{gsub(/_/,",");gsub(/"/,"")};1' input.csv > output.csv