Linux

如何刪除csv中的雙引號

  • March 2, 2022

我有一個 CSV 文件,例如

a.csv
"1,2,3,4,9"
"1,2,3,6,24"
"1,2,6,8,28"
"1,2,4,6,30"

我想要類似的東西

b.csv
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30

我試過awk '{split($0,a,"\"");但沒有幫助。感謝任何幫助。

使用gsub()函式進行全域替換

$ awk '{gsub(/"/,"")};1' input.csv                    
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30

要將輸出發送到新文件,請使用>shell 運算符:

awk '{gsub(/"/,"")};1' input.csv > output.csv

您也可以使用拆分為數組的方法,儘管這不是必需的,但您可以這樣使用它:

$ awk '{split($0,a,/"/); print a[2]}' input.csv       
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30

請注意,在這個特定問題中,一般模式是引號位於行首和行尾,這意味著我們也可以將其視為欄位分隔符,其中欄位 1 為空,欄位 2 為1,2,3,4,欄位 3 也為空。因此,我們可以這樣做:

awk -F '"' '{print $2}' input.csv

我們還可以取出整行的子字元串:

awk '{print substr($0,2,length()-2)}' quoted.csv

說到剝離第一個和最後一個字元,stackoverflow 上有一整篇關於使用其他工具(如sedPOSIX shell)的文章。

最簡單的方法:

tr -d '"' <a.csv >b.csv

引用自:https://unix.stackexchange.com/questions/338524