2013-03-12 52 views
0

我不是在Linux shell命令的主人,我有一个小概率要明白什么是错误的,我命令:AWK Linux的shell似乎错误

当我运行这个

netstat -lptn | cut -d : -f 2,3,4,5,6,7 

结果是;

Proto Recv-Q Send-Q Adresse locale   Adresse distante  Etat  PID/Program name 
631   0.0.0.0:*    LISTEN  853/cupsd  
445    0.0.0.0:*    LISTEN  803/smbd   
139    0.0.0.0:*    LISTEN  803/smbd   
53   0.0.0.0:*    LISTEN  1394/dnsmasq  
:1:631     :::*     LISTEN  853/cupsd  
::445     :::*     LISTEN  803/smbd   
::139     :::*     LISTEN  803/smbd 

好了,现在我添加额外的命令 '的awk' 过滤结果类似:

netstat -lptn | cut -d : -f 2,3,4,5,6,7 |awk 'BEGIN {res="Down"} /^445.*smbd$/ {res=$3} END {print res} 

但结果显示down inspite第二行符合模式:

445    0.0.0.0:*    LISTEN  803/smbd   

为什么我不能有好的结果?

回答

2

你有

/^445.*smbd$/ 

但是看看2号线,有smbd后尾随空格/制表符。所以它不会被匹配。

试试这个:

.......|awk 'BEGIN {res="Down"} /^445.*smbd\s*$/ {res=$3} END {print res}' 

你的榜样数据作为输入,上述AWK打印

LISTEN