将同一文件中的 2 个位置输出到脚本中,然后 echo

将同一文件中的 2 个位置输出到脚本中,然后 echo

我有一个如下所示的文件:

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 可能更有效,但我不熟悉它)

相关内容