Awk 返回值的shell脚本

Awk 返回值的shell脚本,awk,Awk,我有下面的shell脚本,可以根据需要生成输出 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

我有下面的shell脚本,可以根据需要生成输出

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>
20名称:abc地址:203.45.247.247/255.255.255 WDW-THRESH:12 BW-OUT:10000000bps BW-IN:1500000bps状态设备:test247状态:已启用(4447794/0)
25名称:xyz160地址:203.45.233.160/255.255.255.224状态设备:test160状态:启用优先级:通过(1223803328/0)
37名称:testgrp2 WDW-THRESH:8 BW-BOTH:192000bps STATS设备:econetgrp2 STATS:Enabled(0/0)启动:NNNNNNN-255-0停止:NNNNNNN-255-0
62名称:blahblahl54地址:203.45.225.54/255.255.255 WDW-THRESH:5 BWLINK:cbb256 BW-BOTH:256000bps状态设备:Hello54状态:已启用(346918/77)
在现有的
sub()之后添加
sub(“BW.*:,”“,$i)

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 = ""}'

是时候开始学习如何使用而不是依赖他人使您的文章可读了。@Levon:我不明白您关于命令行参数的意思。@Levon:这只是删除
out=$1。我错过了那个要求。我会把这个加到我的答案中。谢谢。@rajiv如果这解决了您的问题,您应该单击答案旁边的复选标记。它将奖励您和海报一些代表点,并将此问题标记为已解决。