我有命令,它给我输入telnet。来自telnet的完整输出它看起来像这样:
telnet myserver.com 1234
服务器,名称= MyServer,年龄= 123,Ver = 1.23,...,...,...
此命令应仅过滤年龄后的数字 - "年龄= 123 "我想过滤:
echo "\n" | nc myserver.com 1234 | (awk -F "=" '{print $3}')
而不是 123 它给了我这个输出:
123,Ver
在年龄=
之后,有没有办法获得正确数字?它只是糟糕的awk过滤参数,但是我尝试了一些其他的awk方法,但这给了我几乎最好的结果......谢谢你的帮助。
编辑:我忘记了,年龄=每天动态+1后的数字......
答案 0 :(得分:2)
我不确定echo "\n"
部分,但我认为这应该做你想做的事情:
nc myserver.com 1234 | awk -F "," '{ split($3, a, /=/); print a[2] }'
我没有在=
分割成字段,而是在,
上完成了。然后将第三个字段拆分为a
上的数组=
,并打印后半部分。
我还删除了awk调用周围的( )
,这不必要地创建了一个子shell。
如果您对在其他地方包含=
或,
的响应永不变化有信心,可以进一步简化awk表达式:
awk -F'[=,]' '{ print $5 }'
括号表达式允许在=
或,
上拆分字段,使您对第五个字段感兴趣的部分。
答案 1 :(得分:0)
您可以运行两次awk命令。
awk -F "=" '{print $3}'|awk -F "," '{print $1}'
您也可以使用剪切命令:
cut -d "=" -f 3|cut -d "," -f 1
答案 2 :(得分:0)
echo "\n" | nc myserver.com 1234 | awk -F "," '{print substr($3,6)}'