首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在shell中将一行拆分为数组

如何在shell中将一行拆分为数组
EN

Stack Overflow用户
提问于 2014-06-03 12:28:48
回答 3查看 76关注 0票数 0

下面的脚本用于丢弃邮件,而ping则在网络中丢弃。

代码语言:javascript
复制
subject="Ping failed"
Email="test1@server.abc.com"
awk '{print $1}' < b.txt | while read ip;do
    CNT=$(ping -c 1 $ip  | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
    if [ $CNT -eq 0 ]; then
        echo "Host : $ip is down (ping failed) at $(date)"|  mail -s "$subject" $Email
    fi
done

这个脚本运行得很好。输入文件有以下内容..

代码语言:javascript
复制
192.2.165.1 ttcn
192.3.4.23 dct
192.3.4.24 abc

我希望将这个文件的行划分为0和1索引形式,比如数组和邮件格式应该是

代码语言:javascript
复制
Host : $ip ttcn is down (ping failed) at $(date)"

有人能帮我弄到这个吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-03 13:41:08

要将一行读入数组,请使用read -a arr,然后使用${arr[0]}${arr[1]}等访问元素。

另外,您不需要解析ping的输出来检查主机是否响应。只需使用退出状态即可。

以下是修订本:

代码语言:javascript
复制
while read -r -a arr
do
    ip="${arr[0]}"
    if ! ping -q -c 1 "$ip" > /dev/null
    then
        mail -s "$subject" "$email" <<< "Host $ip is down (ping failed) at $(date)"
    fi
done < b.txt
票数 1
EN

Stack Overflow用户

发布于 2014-06-03 12:50:09

read提供多个参数,然后将每一列读入相应的变量:

代码语言:javascript
复制
while read ip name;do
    CNT=$(ping -c 1 $ip  | awk -F',' '/received/ { split($2, a, " "); print a[1]}')
    if [ $CNT -eq 0 ]; then
        echo "Host : $ip $name is down (ping failed) at $(date)"|  mail -s "$subject" $Email
    fi
done < b.txt
票数 1
EN

Stack Overflow用户

发布于 2014-06-03 12:50:30

您可以使用awk

代码语言:javascript
复制
 echo "192.2.165.1 ttcn" | awk ' { split($0,a,"");ip=a[1]; print $ip}' 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24015191

复制
相关文章

相似问题

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