【问题标题】:Awk remove specific charactersawk 删除特定字符
【发布时间】:2016-01-05 18:01:53
【问题描述】:

我有命令,它给我 telnet 的输出。 telnet 的完整输出看起来像这样:

telnet myserver.com 1234

服务器,名称=MyServer,年龄=123,版本=1.23,...,...,...

这个命令应该只过滤 Age 之后的数字 - “Age=123” 我想过滤:

echo "\n" | nc myserver.com 1234 | (awk -F "=" '{print $3}')

而不是 123 它给了我这个输出:

123,版本

有没有办法在 Age= 之后获取数字?

这只是一个糟糕的 awk 过滤参数,但我尝试了一些其他的 awk 方法,但这给了我几乎最好的结果......谢谢你的帮助。

编辑:我忘记了,Age= 之后的数字每天都是动态 +1...

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    我不确定echo "\n" 部分,但我认为这应该可以满足您的要求:

    nc myserver.com 1234 | awk -F "," '{ split($3, a, /=/); print a[2] }'
    

    我没有在= 上拆分成字段,而是在, 上这样做了。然后将第三个字段拆分为= 上的数组a 并打印后半部分。

    我还删除了调用 awk 周围的 ( ),这会不必要地创建子 shell。

    如果您确信在其他地方包含 =, 的响应永远不变,您可以进一步简化 awk 表达式:

    awk -F'[=,]' '{ print $5 }'
    

    括号表达式允许在=, 上拆分字段,使您感兴趣的部分位于第五个字段中。

    【讨论】:

      【解决方案2】:
      echo "\n" | nc myserver.com 1234 | awk -F "," '{print substr($3,6)}'
      

      【讨论】:

        【解决方案3】:

        您可以运行两次 awk 命令。

        awk -F "=" '{print $3}'|awk -F "," '{print $1}'
        

        你也可以使用cut命令:

        cut -d "=" -f 3|cut -d "," -f 1
        

        【讨论】:

          猜你喜欢
          • 2011-12-21
          • 2017-01-27
          • 1970-01-01
          • 2020-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-21
          相关资源
          最近更新 更多