模式前的Grep编号

时间:2018-12-04 14:51:23

标签: unix awk sed

我的文件包含以下内容

4 packets transmitted, 2 received, 50% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.904/1.108/1.235/0.148 ms

现在我正在尝试查找丢包率和接收值

loss=`more file.txt  | grep "% packet loss" | awk -v RS=[0-9]+ '{print RT+0;exit}'`

但是它总是返回4(行中的第一个数字)。但我预计损失为50%,而预期为2

2 个答案:

答案 0 :(得分:3)

RS只能通过正则表达式匹配解决问题时,为什么需要使用cat .. | grepawk来解决问题。随便

awk 'match($0, /.*([0-9]) received, ([0-9%]+)/, arr){ print "received="arr[1]; print "loss="arr[2]  }' file.txt

将其存储在shell变量中,例如bash上支持流程替换

read -r received loss < <(awk 'match($0, /.*([0-9]) received, ([0-9%]+)/, arr){ printf "%d %s", arr[1]+0, arr[2] ; }' file)

答案 1 :(得分:0)

这就是您要尝试的全部吗?

$ awk '/% packet loss/{print $6, $4}' file
50% 2

,如果您需要单独使用它们:

$ arr=( $(awk '/% packet loss/{print $6, $4}' file) )
$ echo "${arr[0]}"
50%
$ echo "${arr[1]}"
2