のawk

2017-05-17 12 views
-1

の列を比較するときにデータを失う私は、テキストファイルを持っていると私がしたいすべてが3番目の列を比較し、それが1または0に等しいかどう見ているので、私はただ単にのawk

awk '$3 == 1 { print $0 }' input > output1 
awk '$3 == 0 { print $0 }' input > output2 

これを使用bashスクリプトの一部であり、私はこれにもっとエレガントなアプローチがあると確信していますが、上記のコードは仕事を完了させるべきです、それだけではありません。 inputには425行のテキストがあり、入力の3番目の列は常に1または0なので、output1 + output2にある行の総数は425になるはずですが、417行になります。

ここ

は、入力のサンプル(そのすべては、単に1つの行であり、425のこのような行がある)である:$ 3は1または0である場合

out_first.dat 1 1 0.000000 265075.000000 6.000000e-01 1.005205e-03 9.000000e-01 9.000000e-01 2.889631e+00 -2.423452e+00 3.730018e+00 -1.532915e+00 
+0

最初に$ 3 == 1と$ 3 == 0から変更しました。また、完全なサンプルInput_fileを表示してください。 – RavinderSingh13

+0

コードを$ 3 == 1および$ 3 == 0に変更しました。出力は単なるテキストですが、上の例を追加します。ありがとう – Dani

+1

残りの行にはいくつかの 'space'があるかもしれません – luoluo

答えて

2

、その乗に等しくなり、印刷物output1/2に出力します。そうでない場合は、検査のために他に印刷します。

awk `$3*$3==$3{print > "output"(2-$3); next} {print > "other"}' file 

$3*$3==$3が混乱した場合、好奇心$3==0 || $3===1ため$3==0 || $3===1

への変更は、上記の追従するから$3*($3-1)==0のように書くことができます。

+0

これは賢いです!ほとんど賢明ではありません - あなたの最終的な行はおそらく理解の足掛かりです。 –