从命令行运行ssh行时,它可以正常工作。
从bash脚本看,它显示为:( awk命令中的$ variables为空)
ssh user@server.example.com netstat --tcp| grep 'servervip3'| grep 'ldap'| awk ' == ESTABLISHED'| awk '{print }'| awk -F: '{print }' >>/somepath/somefile.txt
脚本部分:
for (( i=0; i<${arraylength}; ++i ))
do
# drop all beyond first period in SSH_ADDRESS[i] and add vip3
host_grep="`echo ${SSH_ADDRESS[i]}|awk -F. '{ print $1 }'`vip3"
ssh $FIRSTLOGNAME@${SSH_ADDRESS[i]} netstat --tcp| grep '$host_grep'| grep 'ldap'| awk '$6 == "ESTABLISHED"'| awk '{print $5}'| awk -F: '{print $1}' >>$seed_file
done
有什么想法吗?谢谢-jim
答案 0 :(得分:2)
对您的原始命令进行了一些小的优化,如下所示,强烈剂量为awk
。我已将2个grep
个实例与awk
合并为一个。
ssh $FIRSTLOGNAME@${SSH_ADDRESS[i]} netstat --tcp | awk -v host="$host_grep" '(/host/ || /ldap/) && $6 == "ESTABLISHED" {print $5}' | awk -F: '{print $1}' >>$seed_file
我将解释它是如何工作的: -
awk
变量-v host="$host_grep"
进行搜索,以便在regex
匹配中有用。(/host/ || /ldap/) && $6 == "ESTABLISHED"
匹配任何主机存储在$host_grep
或包含关键字ldap
并且第六列值为"ESTABLISHED"
awk -F: '{print $1}'
使用:
分隔字符串并在其前面打印。