特定の列の数値範囲を含む行を返します。ただし、その列に特定の数字が含まれている場合にのみ適用されます。

特定の列の数値範囲を含む行を返します。ただし、その列に特定の数字が含まれている場合にのみ適用されます。

この質問に関連する...特定の列の数値範囲を含む行を返します。 特定の列の数値範囲を含む行を返す

特定の範囲内の数字を含む行を削除する方法を知っています。それでは、他の列に数字が含まれている場合にのみ行を削除するにはどうすればよいですか?

たとえば、2番目の列に4が含まれ、3番目の列に50から85の数字が含まれている場合は、行を削除しますか?入力する

a 3 44 563
d 4 55 11 
e 2 93 445
r 4 82 44
e 4 93 33

出力

a 3 44 563
e 2 93 445
e 4 93 33

私たちはこれを行うことができると思いましたが…うまくいきません。

awk '$2==4' & awk '$2 > 85 && $2 < 50' input > output

誰でもこれを知ることができますか? 2番目の列には1から22の整数のみが含まれていることに注目する価値があります。

よろしくお願いします!

ベストアンサー1

この awk 条件は、次の行を印刷します。

awk '$2 != 4 || $3 > 85 || $3 < 50' input

2番目の列が4に等しくない場合、3番目の列が85より大きい場合、または3番目の列が50未満の場合は1行を印刷します。

この論理的同等物は同じ効果を持つべきです。

awk '! ($2 == 4 && $3 <= 85 && $3 >= 50)' input

コメントで指摘したように、範囲比較を作成するためのよりきれいな方法はmin <= num <= max次のとおりですmin <= num && num <= max

awk '! ($2 == 4 && 50 <= $3 && $3 <= 85)' input
awk '$2 != 4 || $3 < 50 || 85 < $3' input

おすすめ記事