2013-03-12 51 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