【发布时间】:2021-05-03 08:14:06
【问题描述】:
ping 8.8.8.8 -t 5 -c1 | awk '{if (/Time.*/) print $1,$2; else if (NR==1) print "from: " $3 " "}'
当我使用这一行时,else if 不起作用,它基本上从和 ip 打印,无论首先是什么,甚至在 if 条件之前。 我希望它仅在 TTL 足以达到目标时打印它(或者当没有涉及超过生存时间的消息时)
这个命令基本上是我写的traceroute。
我不知道为什么 else if 条件不起作用,我很想帮助。
整个 bash 脚本:
#! /bin/bash
read -p 'IP: ' IP
read -p 'Max hops: ' hops
for hop_num in $(seq 1 $hops)
do
if [[ $IP =~ [0-9] ]];then
echo "$hop_num " | tr -d '\n'
ping $IP -t $hop_num -c1 | awk '{if (/Time.*/) print $1,$2; else if (NR==1) print "Dest: " $3 " "}'
else
echo "not matched"
fi
done
不带 awk 过滤器的 Ping 输出:
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 10.250.99.2 icmp_seq=1 Time to live exceeded
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
【问题讨论】:
-
你到底得到了什么输出?您希望得到什么输出?
-
我得到的输出是:from (8.8.8.8) From 10.250.99.2 我希望只得到 From 10.250.99.2 因为它是唯一匹配 IF 语句的部分
-
你能用
ping的输出更新你的问题吗? -
添加了不带 awk 的 ping 输出。
-
据我了解,查看整个 bash 脚本对我们没有帮助。您只需要发布 a)
awk的输入(恰好是ping命令的输出),b)您使用该输入获得的输出,以及 c)您想要的输出,显然除了 @ 987654327@ 命令及其参数。
标签: awk conditional-statements