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

Bash 如何使用awk对输出应用条件以过滤内容,bash,awk,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=

我想打印所有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 
还有其他/更好的方法吗?

使用Perl(标记),使用所需输出指示的标准
>1

$ awk -F'=' 'NR>2 && $NF>1' a.txt
mpg=6 mrule=11604 reg=33000 score=10625 rank=0 perc=100 mp_demand=34
perl -wnE'/mp_demand=([0-9]+)/ && $1 > 1 && print' a.txt
或者不带名称,
/=([0-9]+)$/
,如果它总是行中的最后一个(或者您想要最后一个数字)


注意:一般不需要
cat
将文件导入命令;当您在命令后提供文件名时,大多数工具都可以将文件逐行输入其
STDIN
(也许对于
,我同意否决这样一个精心起草的问题是不公平的。也许是不满的Perl人没有看到任何Perl?谁知道呢。或者可能有人认为它对其他人没有用处。@hitman99,你的标准不清楚:你的意思是
mp\U demand>1
?[我们需要用
@
标记用户,以便通知他们,如@EdMorton.]任何人(拥有15+声誉)都可以使用小箭头对任何问题和答案进行上下“投票”。但提出问题的用户也可以“接受”其中的一个答案是点击它的复选标记。这些决定完全是你的决定,但它是常见的,并期望(至少)“接受”你认为对你最好的答案(如果有这样的答案)。谷歌搜索它告诉我NF是指当前记录中的字段数,但是你能简单解释一下NF在这里的用法吗?我告诉awk,字段是分开的,所以最后一个字段,$NF是你要测试的行上最后一个
=
之后的文本。