Grep

將同一文件中的 2 個位置輸出到腳本中,然後回顯

  • February 4, 2019

我有一個看起來像這樣的文件:

Sender Bob IP 10.1.1.1
Sender Alex IP 10.1.1.2
Sender Jim IP 10.1.1.3

10行這樣的格式相同。我需要回顯名稱和 IP。在遍歷我的 IP 循環時,因為我正在對每個 IP 進行 ping 測試。

到目前為止,我已經能夠做到這一點:

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

等等。

您想要實現的確切目標尚不清楚,但這樣的事情可能會奏效:

Edit1:由於 Glenn 的評論而有所改進

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

引用自:https://unix.stackexchange.com/questions/480993