Text-Processing
如何從 CSV 文本行中僅提取一些欄位
我需要幫助以找到一種方法來使用 Linux 命令提取以下行的特定資訊。
391,(INSIDE-A),to,(OUTSIDE-A),source,static,SRV_I_N1909,SRV_NAT_I_N1909,destination,static,REDE_AMX_MCK,REDE_AMX_MCK,translate_hits=4399,untranslate_hits=4413 431,(INSIDE-A),to,(OUTSIDE-A),source,static,WK_I_5.5.4.56,SRV_NAT_10.9.3.212,translate_hits=284903,untranslate_hits=8472 432,(INSIDE-A),to,(OUTSIDE-A),source,dynamic,GRP_WKS_HOSTS_,WK_NAT_10.9.7.229,destination,static,G_SRV_ENG_CL,G_SRV_E_CL,translate_hits=0,untranslate_hits=0 436,(INSIDE-A),to,(OUTSIDE-A),source,static,SRV_I_ND007,NAT_10.9.4.238,destination,static,R_MCK,R_MCK,translate_hits=1966,untranslate_hits=1966 437,(INSIDE-A),to,(OUTSIDE-A),source,static,WK_I_5.8.104.120,NAT_A_10.9.7.245,translate_hits=84908,untranslate_hits=1965 440,(INSIDE-A),to,(OUTSIDE-A),source,dynamic,REDE_NET1,NAT_A_10.9.7.247,destination,static,SRV_BT_10.3.33.9,SRV_BT_10.3.33.9,translate_hits=18970,untranslate_hits=18970
如您所見,這些行是不同的所需資訊:
440, translate_hits=18970,untranslate_hits=18970
假設文件中的任何欄位都沒有嵌入逗號或換行符(即它是“簡單的 CSV 文件”),您可以從每行獲取第一個和最後兩個欄位
$ awk -F , 'BEGIN { OFS=FS } { print $1, $(NF-1), $NF }' file.csv 391,translate_hits=4399,untranslate_hits=4413 431,translate_hits=284903,untranslate_hits=8472 432,translate_hits=0,untranslate_hits=0 436,translate_hits=1966,untranslate_hits=1966 437,translate_hits=84908,untranslate_hits=1965 440,translate_hits=18970,untranslate_hits=18970
NF
是一個特殊變數,包含每行的欄位數,我們將輸入和輸出欄位分隔符都設置為逗號。在
你可以試試這個:
grep -o "^[0-9]*\|,tran.*$" file | sed 'N;s/\n,/,/'
輸出:
391,translate_hits=4399,untranslate_hits=4413 431,translate_hits=284903,untranslate_hits=8472 432,translate_hits=0,untranslate_hits=0 436,translate_hits=1966,untranslate_hits=1966 437,translate_hits=84908,untranslate_hits=1965 440,translate_hits=18970,untranslate_hits=18970