awk linux shell似乎存在错误
我不是linux shell命令的高手,我有一点问题要理解我的命令中的错误: 当我运行这个awk linux shell似乎存在错误,shell,awk,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
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
尽管第二行符合模式:
445 0.0.0.0:* LISTEN 803/smbd
那为什么我不能得到好的结果呢?你有
/^445.*smbd$/
但是看看第二行,在smbd
之后有尾随空格/制表符。所以它不会被匹配
试试这个:
.......|awk 'BEGIN {res="Down"} /^445.*smbd\s*$/ {res=$3} END {print res}'
使用示例数据作为输入,上面的awk将打印
LISTEN