2

尝试使用STRICTLY awk来解决一个小问题,但我无法解决这个问题:

# more connections
0x828ac008 127.0.0.1:5152            127.0.0.1:1387              2000
0x82cc28f8 10.4.4.63:1435            10.4.4.72:22                1132
0x82ec1de0 10.4.4.63:1524            50.28.90.36:8080            3248

# awk -F":" '/[0-9]/{print $1,$2}' connections | awk '!/^127/{print "nslookup "$4}'
nslookup 127.0.0.1
nslookup 10.4.4.72
nslookup 50.28.90.36

我正在寻找一种简化的方法来解析除环回^12710.我的网络块中的地址之外的任何内容。是的,我知道我可以使用sed, grep,cut等,但我希望看看其他人会如何在awk. 它更像是一个学习曲线/啊哈!事物

澄清:输出将省略10.x.x.x127.x.x.x

输出将是

nslookup 50.28.90.36

我试过awk !/^127\.|^10\./了,但我无法让它忽略这些值。

4

2 回答 2

5

这个 awk 应该可以工作:

awk -F "[: ]+" 'NR>1 && !($4 ~ /^(127|10)\./){print "nslookup", $4}' connections

输出:

nslookup  50.28.90.36
于 2013-07-17T20:08:58.200 回答
2

Anubhava通过设置Field Separators提供了一个很好的解决方案。这是使用默认值的另一种方法FS

使用split功能:

awk '$3!~/^(127|10)/{split($3,ip,/:/);print "nslookup",ip[1]}' connections

使用sub功能:

awk '$3!~/^(127|10)/{sub(/:.*/,"",$3);print "nslookup", $3}' connections

还有一种bash方法:

while read -ra lines; do 
  [[ ! ${lines[2]} =~ "^(127|10).*" ]] && echo "nslookup ${lines[2]%:*}"; 
done < connections
于 2013-07-18T02:23:40.830 回答