我有一个如下所示的文件:
Sender Bob IP 10.1.1.1
Sender Alex IP 10.1.1.2
Sender Jim IP 10.1.1.3
10 行像这样,格式相同。我需要回显名称和 IP。在迭代 IP 的 for 循环时,因为我正在 ping 测试每个 IP。
到目前为止,我已经能够做到这一点:
THEIP=$(cat /tmp/files/extract.txt | awk '{print $4}')
THEID=$(cat /tmp/files/extract.txt | awk '{print $2}')
extract='/tmp/files/Extracted.txt'
for i in $THEIP;
do
echo "[INFO:]Pinging IP: $i"
check=$(ping -w 1 $i)
if [ $? != 0 ] ; then
echo "[WARN:] **//sender\\** is offline"
else
echo "[INFO:] $i Pingable!"
fi
done
这只能获得 ping,但我无法打印与 IP 相关的发件人。我知道我完全忽略了$THEID
,那是因为我无法弄清楚如何实现它。
嵌套 for 循环 - 它打印出 IP1 + 所有发件人,然后打印出 IP2 + 所有发件人,这违背了我的目的。
我的回声应该是:
[INFO:] - Sender Bob from IP 10.1.1.1 is pingable
[INFO:] - Sender Alex from IP 10.1.1.2 is pingable
等等。
答案1
您想要实现的具体目标尚不清楚,但类似这样的事情可能会起作用:
Edit1:由于格伦的评论而得到改进
Edit2:完成循环内的代码
input="/tmp/files/extract.txt"
while read _ id _ ip; do # iterate over the lines
echo -n "Pinging $id @ ip $ip... "
if ping -w 1 $ip 2>&1 >/dev/null; then
echo OK
else
echo NOPE
fi
done < "$input"
(仅 bash 版本,awk 可能更有效,但我不熟悉它)