2013-07-04 2 views
1

나는 sed/awk 스크립트에 초보자입니다.
문자열을 검색하고 일치하면 다음 단어를 인쇄하십시오.문자열을 검색하고 sed/awk를 사용하여 그 옆에 인쇄 하시겠습니까?

내 출력은 RXpackets:1000TXpackets:2000입니다.

스크립트를 사용하여 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' 

때문에, 당신은 어느 것이 어느 말할 수 없다. RX 패킷 및 TX 패킷에 대해 별도의 명령을 사용하여 독자적으로 가져올 수 있습니다 (행을 변경하면 독자의 연습 문제로 남음).

+0

감사합니다. 하지만, 그 빈 공간을주는 – Riyaz

+0

당신이 준 샘플 데이터를 가지고 저에게 효과적입니다. 콜론 뒤에 공백이 있습니까? 너는 그것을 보여주지 않았다. – Barmar

+0

같은 줄에 있거나 다른 줄에 있습니까? – Barmar

1

줄을 반복 할 수 있고 키워드를 찾을 때 다음 단어를 캡처 할 수 있습니다.

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

이를 위해 펄을 사용할 수 있습니다 어떤 형식에서

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

하면 출력이 필요합니까 :

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

는 아래 테스트?

관련 문제