2017-01-30 54 views
1

我從那裏我嘗試獲得的IP地址反向指針記錄在第7欄下面AWK的輸出分配給特定的列在文件

2017-01-09 11:25:22.421  0.306 TCP 192.168.1.2:50599 -> 192.0.2.25:443  500 20000  1 
2017-01-09 11:30:11.210  0.000 TCP 192.168.1.2:50503 -> 192.0.2.25:443  100  4000  1 
2017-01-09 09:01:22.546  0.000 TCP 192.169.1.2:50307 -> 192.0.2.25:443  100  4000  1 

如果日誌文件輸出下面的例子我運行這個awk命令,我可以提取的反向記錄的7列:

cat test.txt | awk '{print $7}'| grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'| xargs -I % bash -c 'echo "$(dig -x % +short)"' 

我如何從上面的命令的輸出替換什麼在第7欄來更新它,所以它會如閱讀:

2017-01-09 11:25:22.421  0.306 TCP google.com -> 192.0.2.25:443  500 20000  1 
2017-01-09 11:30:11.210  0.000 TCP -> 192.0.2.25:443  100  4000  1 
2017-01-09 09:01:22.546  0.000 TCP yahoo.com -> 192.0.2.25:443  100  4000  1 

回答

2

用awk只:

$ awk '{split($7,a,":"); r=""; c="dig -x " a[1] " +short"; c|getline r; $7=r} 1' file 
  • split通過:擺脫$7的IP來a[1]
  • 構建外殼命令c VAR
  • 執行它,結果存儲到r
  • 替換$7機智ħrprint1

未顯示任何示例輸出作爲測試文件沒有,將返回任何反向IPS。

+0

感謝詹姆斯 - 它沒有循環遍歷第7列中的每個地址 - 它只是在第7列中顯示第7列中的所有地址,當我運行它時......如果沒有可用的指針記錄,我認爲它會只是顯示一個空白區域? – frodo

+0

你說得對,對不起。 'r'沒有被清空,所以以前的值會被輸出。 –