2017-09-21 2 views
-1

mp_demand> 1 という行をすべて出力したいとします。 私はこれにawkを使用していますが、何とか実現できません。awkを使用して出力に条件を適用してコンテンツをフィルタリングする方法

[email protected]:#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 

私は何をしようとしていますが

[email protected]:# 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の(タグ付け)で

+2

このようなドラフト化された質問を落とすのは不公平です。 – anubhava

+0

Perlを見ていないと不満を感じるかもしれませんか?知るか。 –

+0

誰か他の人には役に立たないと思った人もいます。 – ikegami

答えて

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

助けてくれてありがとう:) グーグルでは、NFは現在のレコードのフィールド数を表していますが、ここでNFがどのように使用されているかについて簡単に説明できます。 – hitman99

+1

'-F '=''私はawkにフィールドを '=' -separatedと言ったので、最後のフィールド$ NFはテストする値である行の最後の '='の後のテキストです。 –

2

、それはライン(またはあなたの中にいつも最後だ場合は所望の出力として> 1の基準を使用して

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

または名前なし、/=([0-9]+)$/、  を示し、最後の番号が必要です)

注:一般にcatには不要で、ファイルをコマンドにパイプすることができます。ほとんどのツールは、コマンドの後にその名前を指定したときに、STDINにファイルを1行ずつ送り込むことができます(おそらく<

関連する問題