2017-06-03 63 views
0

我的測試文件看起來像下面awk中匹配的線和打印列多個模式,如果發現其他打印

輸入

$ cat file 
date="2017-10-10" ip=192.168.1.1:22 inbound=100 outbound=50 
date="2017-10-10" ip=192.168.1.1:22 inbound=100 
date="2017-10-10" ip=192.168.1.1:22 outbound=60 

我用下面的awk命令來提取值入境=。

$ awk '{found=0; for(i=1;i<=NF;i++) { if ($i ~ /inbound/) { split($i,arr,"="); print arr[2];found=1 } } if (!found) print 0 }' file 
100 
100 
0 

現在我想補充的「IP」,「端口」和「出站」到列表中,這樣我的輸出看起來像

IP,PORT,INBOUND,OUTBOUND 

192.168.1.1,22,100,50 
192.168.1.1,22,100,0 
192.168.1.1,22,0,60 
+0

收盤爲dup,因爲我完全告訴你**如何在[我對你最後一個問題的回答]中做到這一點(https://stackoverflow.com/a/44331032/1745001) - 建立數組,然後打印你喜歡的任何值名稱。 –

回答

0

什麼

awk '{ 
    ip=0; 
    port=0; 
    inbound=0; 
    outbound=0; 
    for(i=1;i<=NF;i++) { 
     if ($i ~ /ip=/) { 
      split($i,arr,"="); 
      split(arr[2],arr2,":"); 
      ip = arr2[1]; 
      port = arr2[2]; 
     } 
     if ($i ~ /inbound/) { 
      split($i,arr,"="); 
      inbound=arr[2]; 
     } 
     if ($i ~ /outbound/) { 
      split($i,arr,"="); 
      outbound=arr[2]; 
     } 
    } 
    print ip "," port "," inbound "," outbound 
}' file