Grep
將同一文件中的 2 個位置輸出到腳本中,然後回顯
我有一個看起來像這樣的文件:
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 可能更高效,但我不熟悉)