使用sed / awk搜索字符串并在其旁边打印?

时间:2013-07-04 05:43:19

标签: sed awk centos

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

,即我的输出为RXpackets:1000TXpackets:2000

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

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

4 个答案:

答案 0 :(得分:1)

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

... | awk -F: '{for(i=1;i<=NF;i++) if($i~/RXpackets|TXpackets/) print $i"="$(i+1)}'

答案 1 :(得分:1)

我建议您从/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"

答案 2 :(得分:0)

试试这个:

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

由于这只是打印数字,你不知道哪个是哪个。您可以为RXpackets和TXpackets使用单独的命令来自己获取它们(更改行是留给读者的练习)。

答案 3 :(得分: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
>

您需要以什么格式输出?