我是sed/awk
脚本的新手。
我想搜索一个字符串,如果匹配则打印下一个单词。
即我的输出是RXpackets:1000
和TXpackets:2000
。
使用sed/awk
脚本我想搜索并将值RXpackets
和TXpackets
值存储到变量中。这意味着1000
和2000
价值观。有人可以帮帮我吗?
awk/sed
还建议我最好学习和使用哪个脚本。
您可以遍历该行,并在找到关键字时捕获下一个单词。
... | awk -F: '{for(i=1;i<=NF;i++) if($i~/RXpackets|TXpackets/) print $i"="$(i+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"
试试这个:
sed -n '/[RT]Xpackets/s/.*[RT]Xpackets: *\([0-9]*\).*/\1/p'
由于这只是打印数字,因此您无法分辨哪个是哪个。您可以对 RXpackets 和 TXpackets 使用单独的命令来自行获取它们(更改行留给读者作为练习)。
您可以为此使用 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
>
您需要以什么格式输出?