AWK在bash Script中没有表现

时间:2016-04-19 12:11:51

标签: bash awk

从命令行运行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

1 个答案:

答案 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

我将解释它是如何工作的: -

  1. 将主机名存储为awk变量-v host="$host_grep"进行搜索,以便在regex匹配中有用。
  2. (/host/ || /ldap/) && $6 == "ESTABLISHED"匹配任何主机存储在$host_grep或包含关键字ldap并且第六列值为"ESTABLISHED"
  3. 的行
  4. awk -F: '{print $1}'使用:分隔字符串并在其前面打印。