首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将同一文件中的2个位置输出到脚本中,然后回送

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

Unix & Linux用户
提问于 2018-11-10 18:27:19
回答 1查看 141关注 0票数 0

我有一个像这样的文件:

代码语言:javascript
复制
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循环时,因为我要对每个IP进行ping测试。

到目前为止,我已经做到了:

代码语言:javascript
复制
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 +所有发件人,这违背了我的目的。

我的回声应该是:

代码语言:javascript
复制
[INFO:] - Sender Bob from IP 10.1.1.1 is pingable
[INFO:] - Sender Alex from IP 10.1.1.2 is pingable

诸若此类。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-11-10 18:41:52

你到底想要实现什么还不清楚,但这样的事情可能会奏效:

Edit1:多亏格伦的评论而有所改进

Edit2:完成了循环中的代码

代码语言:javascript
复制
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可能更高效,但我不熟悉它)

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/480993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档