执行Linux命令ping 192.168.1.103 -c 1 | awk '{print $7}'结果总是多其他值

执行Linux命令
ping 192.168.1.103 -c 1 | awk '{print $7}'
结果如下:
data.
time=14.5

packet

我只想要time=14.5这个结果,怎么破
最新回答
云终韵

2024-11-03 00:13:58

ping 127.1 -c1 | grep "time=" |awk '{print $7}'

ping时虽然用c1只指定一个包,但ping命令在结束时会返回统计信息,awk默认会按行进行截取,返回多少行就截取多少次,所以必须指定截取哪一行的信息,通过比对"time="字符串,能确定行的唯一性,所以使用grep过滤该字符串,并用awk或者sed cut 打印需要的信息.

form , ttl= , icmp_seq 都可用来代替time=来过滤

云散风尽独留

2024-11-03 00:19:54

i=1;while [ $i -lt 256 ]; do test=`ping 192.168.1.$i -c 2 | grep '0 recevied'`; test "x$test" = "x" && echo "192.168.1.$i">>badip.txt || echo "192.168.1.$i">>goodip.txt; let i++; done

直接复制粘贴到命令行窗口中,或者分号为分隔一句句输入。
速度较慢,可以分多个窗口来对1到255分段进行测试,然后输出到不同的文件,最后再将几个文件合并起来。比如1-19输出到goodip1.txt,20-49输出到goodip2.txt……最后cat goodip1.txt goodip2.txt …… > goodip.txt

-c 2可以改为-c 1,就是设置对每个ip进行多少次ping,有发现第一次ping不通,但第2次可以ping通的情况,所有-c 2会比 -c 1的结果更可靠,但速度会慢一些。
追问
大牛,问个问题。
我如果想对ping出来的time的值进行排序怎么做
达阳云

2024-11-03 02:11:11

# ping 127.0.0.1 -c 10 | awk '{if($8=="ms"){print $7;}}'
time=0.018
time=0.027
time=0.030
time=0.027
time=0.035
time=0.027
time=0.028
time=0.026
time=0.172
time=0.027
情伤己

2024-11-03 00:10:29

取结果的第二行就好
ping baidu.com -c 1 | awk 'NR==2{print $7}'
简遇而安

2024-11-03 01:41:30

ping 192.168.1.103 -c 1 | awk '/time=/{print $7}'
追问
赞,本人刚学,菜鸟级别的