-1

必要に応じて出力を生成するシェルスクリプトを以下に示します。

RuleNum=$1    

cat input.txt |awk -v var=$RuleNum '$1==var {out=$1; for(i=NF;i >=0;i--)if($i~/bps/){sub("bps","",$i);out=out" "$i} print out;out=""}' 

./downup.sh 20
20 BW-IN:2560000 BW-OUT:2048000

以下のように出力したい

./downup.sh 20    
256000 2048000
./downup.sh 36
2560000 2048000

以下はinput.txt

20 name:abc addr:203.45.247.247/255.255.255.255 WDW-THRESH:12 BW-OUT:10000000bps BW-IN:15000000bps STATSDEVICE:test247 STATS:Enabled (4447794/0) <IN OUT>
25 name:xyz160 addr:203.45.233.160/255.255.255.224 STATSDEVICE:test160 STATS:Enabled priority:pass-thru (1223803328/0) <IN OUT>
37 name:testgrp2 <B> WDW-THRESH:8 BW-BOTH:192000bps STATSDEVICE:econetgrp2 STATS:Enabled (0/0) <Group> START:NNNNNNN-255-0 STOP:NNNNNNN-255-0
62 name:blahblahl54 addr:203.45.225.54/255.255.255.255 WDW-THRESH:5 BWLINK:cbb256 BW-BOTH:256000bps STATSDEVICE:hellol54 STATS:Enabled (346918/77) <IN OUT>
4

1 に答える 1

0

sub("BW.*:", "", $i)既存の の後に追加しsub()ます。

そしてcat、必要ではありません。ファイル名を行末に置くだけです:

awk ... input.txt

出力からルール番号を削除するには、 を削除しout = $1;ます。

各行の先頭にスペースを出力しないように追加した結果を次に示します。

awk -v var=$RuleNum '$1==var {for(i = NF; i >= 0; i--) if ($i ~ /bps/) {sub("bps","",$i); sub("BW.*:", "", $i); out = out delim $i; delim = OFS} print out; out = delim = ""}'
于 2012-06-29T16:50:44.970 に答える