2013-07-04 42 views
1

我是新手到sed/awk腳本。
我想搜索一個字符串,如果匹配,然後打印下一個字。搜索一個字符串,並使用sed/awk旁邊的打印?

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

使用sed/awk腳本我想搜索,並將值RXpacketsTXpackets值存儲到變量中。這意味着10002000值。有人可以幫助我嗎?

另外建議我最好學習和使用哪個腳本awk/sed

回答

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" 
+1

這很酷。謝謝。但是,在我的情況下,它分別取$ 2和$ 10的值..反正非常感謝你 – Riyaz

+0

感謝您接受答案。您正在查找在第3和第11列中表示的R/TX包。第2和第10列表示字節數。 – jgb

0

試試這個:

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

由於這只是打印數字,你不能告訴哪個是哪個。您可以對RXpackets和TXpackets使用單獨的命令來自行獲取它們(更改這些行僅作爲讀者的練習)。

+0

謝謝您的回答。但是,它給出了一個空白區域 – Riyaz

+0

它爲我提供了你提供的樣本數據。冒號後有空格嗎?你沒有顯示它。 – Barmar

+0

它們在同一行還是不同行? – Barmar

1

您可以迭代該行,並在找到關鍵字時捕獲下一個單詞。

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

在什麼格式,你所需要的輸出?

相關問題