linux脚本怎么读取文本的某一列进行操作
catip.txt172.16.0.221b172.16.0.225cpingip.txt每行的第一列,把piing结果的一些字段+ip.txt的2列值显示出来。我只会i...
cat ip.txt
172.16.0.221 b
172.16.0.225 c
ping ip.txt每行的第一列,把piing结果的一些字段+ ip.txt的2列值 显示出来。
我只会ip.txt只有一列的情况,且显示结果没有包括ip.txt的第2列
#!/bin/sh
while read LINE;
do
ping -c 1 ${LINE}| grep -1 "transmitted"| sed 'N;N;s/\n/ /g'| awk -F",| " '{print $2,$10,$13,$18,$22}' | awk -F"/" '{print $1,$2,$3,$4}';
done<ip.txt
运行结果:
[root@localhost tmp]# ./test.sh
172.16.0.221 1 0% 0ms 0.025 0.025 0.025 0.000
172.16.0.225 1 0% 0ms 0.199 0.199 0.199 0.000
对ip.txt有2列的情况该怎么写?我要的运行结果是:
172.16.0.221 a 1 0% 0ms 0.025 0.025 0.025 0.000
172.16.0.225 b 1 0% 0ms 0.199 0.199 0.199 0.000
上面写错了,我要的运行结果是:
172.16.0.221 b 1 0% 0ms 0.025 0.025 0.025 0.000
172.16.0.225 c 1 0% 0ms 0.199 0.199 0.199 0.000 展开
172.16.0.221 b
172.16.0.225 c
ping ip.txt每行的第一列,把piing结果的一些字段+ ip.txt的2列值 显示出来。
我只会ip.txt只有一列的情况,且显示结果没有包括ip.txt的第2列
#!/bin/sh
while read LINE;
do
ping -c 1 ${LINE}| grep -1 "transmitted"| sed 'N;N;s/\n/ /g'| awk -F",| " '{print $2,$10,$13,$18,$22}' | awk -F"/" '{print $1,$2,$3,$4}';
done<ip.txt
运行结果:
[root@localhost tmp]# ./test.sh
172.16.0.221 1 0% 0ms 0.025 0.025 0.025 0.000
172.16.0.225 1 0% 0ms 0.199 0.199 0.199 0.000
对ip.txt有2列的情况该怎么写?我要的运行结果是:
172.16.0.221 a 1 0% 0ms 0.025 0.025 0.025 0.000
172.16.0.225 b 1 0% 0ms 0.199 0.199 0.199 0.000
上面写错了,我要的运行结果是:
172.16.0.221 b 1 0% 0ms 0.025 0.025 0.025 0.000
172.16.0.225 c 1 0% 0ms 0.199 0.199 0.199 0.000 展开
展开全部
[root@dba ~]# cat ip.txt
192.168.1.1 b
192.168.1.1 c
[root@dba ~]# cat a.sh
#!/bin/bash
while read LINE;
do
echo -e "${LINE} `ping -c 1 ${LINE}| grep -1 "transmitted"| sed 'N;N;s/\n/ /g'| awk -F",| " '{print $10,$13,$18,$22}' | awk -F"/" '{print $1,$2,$3,$4}';`"
done<ip.txt
[root@dba ~]# ./a.sh
192.168.1.1 b 1 0% 0ms 0.864 0.864 0.864 0.000
192.168.1.1 c 1 0% 0ms 0.829 0.829 0.829 0.000
是这意思不?
取某列的话,取出来放到一个临时文件里,然后想怎么操作就怎么操作,然后再把临时文件删了,方法可以有很多种,关键是根据各种环境灵活运用啊
[root@dba ~]# cat ip.txt
192.168.1.1 b
192.168.1.1 c
[root@dba ~]# awk -F " " '{print $2}' ip.txt > temp.txt
[root@dba ~]# cat temp.txt
b
c
[root@dba ~]# sed '2s/[a-z]/999/g' temp.txt
b
999
[root@dba ~]# rm -rf temp.txt
是这意思不?觉得可以给好评啊亲!
192.168.1.1 b
192.168.1.1 c
[root@dba ~]# cat a.sh
#!/bin/bash
while read LINE;
do
echo -e "${LINE} `ping -c 1 ${LINE}| grep -1 "transmitted"| sed 'N;N;s/\n/ /g'| awk -F",| " '{print $10,$13,$18,$22}' | awk -F"/" '{print $1,$2,$3,$4}';`"
done<ip.txt
[root@dba ~]# ./a.sh
192.168.1.1 b 1 0% 0ms 0.864 0.864 0.864 0.000
192.168.1.1 c 1 0% 0ms 0.829 0.829 0.829 0.000
是这意思不?
取某列的话,取出来放到一个临时文件里,然后想怎么操作就怎么操作,然后再把临时文件删了,方法可以有很多种,关键是根据各种环境灵活运用啊
[root@dba ~]# cat ip.txt
192.168.1.1 b
192.168.1.1 c
[root@dba ~]# awk -F " " '{print $2}' ip.txt > temp.txt
[root@dba ~]# cat temp.txt
b
c
[root@dba ~]# sed '2s/[a-z]/999/g' temp.txt
b
999
[root@dba ~]# rm -rf temp.txt
是这意思不?觉得可以给好评啊亲!
追问
用你的代码运行结不对,因为ping -c 1 ${LINE} 这变成ping -c 1 172.16.0.221 b 而不是ping -c 1 172.16.0.221 会ping不通。
用下面这个别人教我的就可以了
#!/bin/sh
while read a b;
do
result=`ping -c 1 $a| grep -A1 "transmitted"| sed 'N;s/\n/ /g'| awk -F",| " '{print $5,$8,$13,$17,$22}'| awk -F"/" '{print $1,$2,$3,$4}'`;
echo "$a $b $result"
done < ip.txt
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |