我的文件包含以下内容
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
答案 0 :(得分:3)
当RS
只能通过正则表达式匹配解决问题时,为什么需要使用cat .. | grep
和awk
来解决问题。随便
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