2017-08-22 110 views
1

我有一個包含以下數據的文本文件。刪除字段以使用awk或sed獲取值

  \ { 
       Name  "ABC", 
       count 378 
      } 
      \ { 
       Name  "DEF", 
       count 5283 
      } 
      \ { 
       Name  "BCD", 
       count 152244 
      } 
      \ { 
       Name  "XYZ", 
       count 5688 
      } 
      \ { 
       Name  "1A2B", 
       count 1749132 
      } 

我要像結果: -

  ABC , 378 
      DEF , 5283 
      BCD , 152244 
      XYZ , 5688 
      1A2B ,1749132 

我嘗試使用命令刪除非revelant數據: -

  grep -e '^ ' result.txt 

但我無法繼續超越它。有人可以幫助我嗎?

回答

2

請嘗試以下awk,並讓我知道這是否有助於你。

awk '/Name/{gsub(/\"|\,/,"",$2);val=$2;next} /count/{print val " , " $2}' Input_file 

OR

awk -F'[",]' '/Name/{val=$2;next} /count/{split($0, a," ");print val,a[2]}' OFS=" , " Input_file 
+1

完美。有效。 – user2854333

1

這裏的另一個awk以爲你可以申請,

$ awk '$2~/[0-9A-Z]/ {printf gsub(/"/,"",$2)?$2:" "$2"\n"}' file 

簡要說明,

  • $2~/[0-9A-Z]/:查找記錄匹配的正則表達式[0-9A-Z]
  • gsub(/"/,"",$2):在$2刪除",然後如果你使用的是支持正則表達式RS(至少在觀看或mawk)一個awk打印
1

,你可以做這樣的:

awk '!(NR%2) { print $3 " , " $5 }' RS='\\ *{|}' FS='[\n," ]+' infile 

輸出:

ABC , 378 
DEF , 5283 
BCD , 152244 
XYZ , 5688 
1A2B , 1749132 
0

sed的解決方案:

sed -En '/[{}]/d;N; s/Name *"([^"]+)".*count *([0-9]+).*/\1 , \2/p;' file 

輸出:

 ABC , 378 
     DEF , 5283 
     BCD , 152244 
     XYZ , 5688 
     1A2B , 1749132