awk實(shí)戰(zhàn)7-去掉雙引號中間的字符串包含的逗號

1、問題舉例

有時(shí)候,文本文件中的數(shù)量、金額等數(shù)字會用千分位隔開,例如下面的例子file.csv,營收字段用千分位分隔,并用雙引號括起來,表示這是一個字段的數(shù)據(jù),避免跟其他字段混淆:

月份,企業(yè),員工數(shù),營收,利潤
201901,企業(yè)A,1500,"1,234,567.89",400
201902,企業(yè)B,300,900.01,100

當(dāng)金額沒有超過1000時(shí),就不存在千分位,也沒有雙引號。

那么,我們就不能簡單的用awk -F"," 來指定逗號為分隔符對文件進(jìn)行處理,因?yàn)閍wk不能區(qū)分千分位和逗號分隔符。

推而廣之,問題就是我們?nèi)绾稳コp引號中間的逗號。

2、處理方法

因?yàn)槲募杏械男杏须p引號,有的行沒有雙引號,所以我們先處理帶雙引號的行。

處理的關(guān)鍵是把雙引號作為字段分隔符,這樣我們就可以把兩個雙引號中間部分的字符串提取出來,并利用gsub函數(shù)把逗號全部替換為空。

命令:
awk -F"\"" '/".*"/ {gsub(",","",$2); print $1$2$3}'  file.csv

輸出:
201901,企業(yè)A,1500,1234567.89,400

說明:

awk -F"\""   是指定雙引號為分隔符
/".*"/       是用正則表達(dá)式匹配有兩個雙引號的行
gsub(",","",$2)   是把兩個雙引號中間的字符串中的逗號全部替換為空

不帶雙引號的行直接輸出即可,完整命令如下:

awk -F"\"" '! /".*"/ {print $0} /".*"/ {gsub(",","",$2); print $1$2$3}' file.csv

注意,這里要把不帶雙引號的部分 ! /".*"/ {print $0} 原樣輸出放在前面處理,原因是gsub函數(shù)處理后$0中的雙引號就沒有了,會導(dǎo)致重復(fù)匹配。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Linux指令中文說明傳送入口 整理自Linux指令中文說明 文本和數(shù)據(jù)進(jìn)行處理的編程語言awk 是一種編程語言,...
    釋閑人閱讀 2,395評論 1 6
  • awk介紹awk變量printf命令:實(shí)現(xiàn)格式化輸出操作符awk patternawk actionawk數(shù)組aw...
    哈嘍別樣閱讀 1,744評論 0 4
  • 一.AWK說明 awk是一種編程語言,用于在linux/unix下對文本和數(shù)據(jù)進(jìn)行處理。數(shù)據(jù)可以來自標(biāo)準(zhǔn)輸入、一個...
    __一蓑煙雨__閱讀 269評論 0 0
  • 一. AWK 說明 awk的處理文本和數(shù)據(jù)的方式:它逐行掃描文件,從第一行到最后一行,尋找匹配的特定模式的行,并...
    西華子閱讀 1,053評論 0 4
  • 本章主要學(xué)習(xí)內(nèi)容awk介紹 ?awk基本用法 ?awk變量 ?awk格式化 ?awk操作符 ?awk條件判斷 ?a...
    楠人幫閱讀 1,377評論 0 8

友情鏈接更多精彩內(nèi)容