![](/img/trans.png)
[英]How to remove all spaces between double quotes within a block of text using linux command such as awk, sed
[英]How to remove double quotes in a specific column by using sub() in AWK
我的樣本數據是
cat > myfile
"a12","b112122","c12,d12"
a13,887988,c13,d13
a14,b14121,c79,d13
當我嘗試從第 2 列中刪除"
awk -F, 'BEGIN { OFS = FS } $2 ~ /"/ { sub(/"/, "", $2) }1' myfile
"a12",b112122","c12,d12"
a13,887988,c13,d13
a14,b14121,c79,d13
它只刪除了 1 個逗號,而不是b112122我得到的是b112122"
如何刪除第二列中的所有 "
從文檔:
搜索目標,將其視為字符串,用於與正則表達式 regexp 匹配的最左邊最長的子字符串。[...] 返回進行的替換次數(零或一)。
很明顯,函數sub
最多只進行一次替換,並且不會替換所有出現的情況。
相反,使用gsub
:
搜索它可以找到的所有最長的、最左邊的、不重疊的匹配子串的目標,並用替換來替換它們。 gsub() 中的“g”代表“global”,意思是到處替換。
所以你可以在你的行中添加一個“g”,它工作正常:
awk -F, 'BEGIN { OFS = FS } $2 ~ /"/ { gsub(/"/, "", $2) }1' myfile
當您處理 CSV 文件時,不使用FPAT
,它遲早會崩潰。
這是一個執行 jib 的gnu awk
。
awk -v OFS="," -v FPAT="([^,]+)|(\"[^\"]+\")" '{gsub(/"/,"",$2)}1' file
"a12",b112122,"c12,d12"
a13,887988,c13,d13
a14,b14121,c79,d13
它可以在任何列上正常工作,編號 3 也是如此。
刪除第 3 列上的"
同時將分隔符更改為|
示例
awk -v OFS="|" -v FPAT="([^,]+)|(\"[^\"]+\")" '{gsub(/"/,"",$3);$1=$1}1' file
"a12"|"b112122"|c12,d12
a13|887988|c13|d13
a14|b14121|c79|d13
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.