Text-Processing

僅在逗號分隔文件中刪除引號之間的逗號

  • November 12, 2021

我有一個用逗號 ( ,) 分隔的輸入文件。有一些用逗號括在雙引號中的欄位。這是範例行

123,"ABC, DEV 23",345,534.202,NAME

我需要刪除雙引號和雙引號內出現的所有逗號。所以上面的行應該被解析成如下所示

123,ABC DEV 23,345,534.202,NAME

我嘗試了以下使用sed但沒有給出預期的結果。

sed -e 's/\(".*\),\(".*\)/\1 \2/g'

sed請使用awk或任何其他 unix 實用程序的任何快速技巧?

如果引號是平衡的,您將需要刪除每個其他引號之間的逗號,這可以這樣表示awk

awk -F'"' -v OFS='' '{ for (i=2; i<=NF; i+=2) gsub(",", "", $i) } 1' infile

輸出:

123,ABC DEV 23,345,534.202,NAME

解釋

-F"使得 awk 將雙引號處的行分開,這意味著每個其他欄位都將是引號間文本。for 循環gsub在所有其他欄位上執行,即全域替換的縮寫,將逗號 ( ",") 替換為空 ( "")。最後1呼叫預設程式碼塊:{ print $0 }.

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