如何使用awk过滤内容来对输出应用条件

时间:2017-09-21 18:46:09

标签: bash awk

我想要打印mp_demand> 1中的所有行 。 我正在使用awk,但不知何故无法实现。

root@1.2.3.4:#cat a.txt
Target MR 11604 MPG: -1 Region: -1
reading assignments message /a/tmp/a.txt
mpg=1 mrule=11604 reg=33000 score=10625 rank=0 perc=100 mp_demand=1
mpg=2 mrule=11604 reg=33000 score=10625 rank=0 perc=100 mp_demand=1
mpg=3 mrule=11604 reg=33000 score=10625 rank=0 perc=100 mp_demand=1
mpg=4 mrule=11604 reg=33000 score=10625 rank=0 perc=100 mp_demand=1
mpg=5 mrule=11604 reg=33000 score=10625 rank=0 perc=100 mp_demand=1
mpg=6 mrule=11604 reg=33000 score=10625 rank=0 perc=100 mp_demand=34

我正在尝试的是

root@1.2.3.4:#  cat a.txt  | awk 'BEGIN {p=0}  $7  >= 0 {p ++} END {print p}' | head 
45877

但是,我想要的预期输出是

mpg=6 mrule=11604 reg=33000 score=10625 rank=0 perc=100 mp_demand=34 

其他/更好的方法吗?

2 个答案:

答案 0 :(得分:3)

$ awk -F'=' 'NR>2 && $NF>1' a.txt
mpg=6 mrule=11604 reg=33000 score=10625 rank=0 perc=100 mp_demand=34

答案 1 :(得分:2)

使用Perl(已标记),使用> 1标准作为所需输出表示

perl -wnE'/mp_demand=([0-9]+)/ && $1 > 1 && print' a.txt

或者没有名称,/=([0-9]+)$/如果它始终位于行中(或者您想要最后一个号码)

注意:cat通常不需要将文件传输到命令中;当您在命令后提供其名称时,大多数工具可以逐行将文件提供到STDIN中(可能使用<