1

我是sed/awk脚本的新手。
我想搜索一个字符串,如果匹配则打印下一个单词。

即我的输出是RXpackets:1000TXpackets:2000

使用sed/awk脚本我想搜索并将值RXpacketsTXpackets值存储到变量中。这意味着10002000价值观。有人可以帮帮我吗?

awk/sed还建议我最好学习和使用哪个脚本。

4

4 回答 4

1

您可以遍历该行,并在找到关键字时捕获下一个单词。

... | awk -F: '{for(i=1;i<=NF;i++) if($i~/RXpackets|TXpackets/) print $i"="$(i+1)}'
于 2013-07-04T06:14:00.237 回答
1

我建议从中获取值,而不是用etc/proc/net/dev将它们拉出来。ifconfig

例子:

#!/bin/sh
iface=eth0
read RXp TXp <<< $(grep $iface /proc/net/dev | awk '{ print $3, $11 }')

echo "$RXp packages received"
echo "$TXp packages sent"
于 2013-07-04T18:25:30.303 回答
0

试试这个:

sed -n '/[RT]Xpackets/s/.*[RT]Xpackets: *\([0-9]*\).*/\1/p'

由于这只是打印数字,因此您无法分辨哪个是哪个。您可以对 RXpackets 和 TXpackets 使用单独的命令来自行获取它们(更改行留给读者作为练习)。

于 2013-07-04T05:47:32.937 回答
0

您可以为此使用 perl:

perl -lne 'push @a,/[RT]Xpackets:(\d+)/g;END{print "@a"}'

测试如下:

> echo "my output is RXpackets:1000 and TXpackets:2000" | perl -lne 'push @a,/[RT]Xpackets:(\d+)/g;END{print "@a"}'
1000 2000
>

您需要以什么格式输出?

于 2013-07-04T08:10:01.070 回答