私のファイルは次のとおりです。
AA 110 B 10 .. BB 15 ... BBB 20 D F 25 D D
AA 111 B 50 .. BB 55 ... BBB 30 F F 45 F F
AA 112 C 2 .. BB 3 ... BBB 0 D F 0 D F
AA 120 D 2 .. FF 3 ... FFF 3 D F 3 D D
すべての列に値= < 10を含む行を削除したいです。私はsed
andの使用を知っていますが、awk '$3 !=< 10'
これは3番目のフィールドの行だけを削除します。すべての列を考慮するようにqwkに指示する方法はありますか?
ベストアンサー1
perl
救いに来てください
$ cat ip.txt
AA 110 B 10 .. BB 15 ... BBB 20 D F 25 D D
AA 111 B 50 .. BB 55 ... BBB 30 F F 45 F F
AA 112 C 2 .. BB 3 ... BBB 0 D F 0 D F
AA 120 D 2 .. FF 3 ... FFF 3 D F 3 D D
$ perl -ae 'print if !(grep { $_ <= 10 && /^\d+$/ } @F)' ip.txt
AA 111 B 50 .. BB 55 ... BBB 30 F F 45 F F
-a
入力行を空間的に分割して@F
配列に保存するgrep { $_ <= 10 && /^\d+$/ } @F
@F
数値のみで構成された配列を取得し、値は次のとおりです。<= 10
- その後、grepが返されたらその行を印刷します
0
。 aroundは、要素自体ではなく一致数を返すことを意味します()
。grep
別の条件をテストしてみましょう。
$ perl -ae 'print if !(grep { $_ < 10 && /^\d+$/ } @F)' ip.txt
AA 110 B 10 .. BB 15 ... BBB 20 D F 25 D D
AA 111 B 50 .. BB 55 ... BBB 30 F F 45 F F
この問題のようないくつかの条件は解決されるかもしれません(回避策より速いgrep
かもしれません)。perl
$ grep -vw '[0-9]\|10' ip.txt
AA 111 B 50 .. BB 55 ... BBB 30 F F 45 F F
$ grep -vw '[0-9]' ip.txt
AA 110 B 10 .. BB 15 ... BBB 20 D F 25 D D
AA 111 B 50 .. BB 55 ... BBB 30 F F 45 F F
-v
パターン外の線の一致-w
フルワードのみ一致