行の1つの列の値が1未満の場合に行を削除する方法

行の1つの列の値が1未満の場合に行を削除する方法

7000 行と 28 列のファイルがあります。28 列のうち 1 列でも値が 1 未満の場合、行を削除するにはどうすればよいでしょうか。

awk列が指定されると行が削除されるという回答を見つけました。

しかし、列番号に関係なく、値が 1 未満の行を削除したいと思います。

私のファイルはタブ区切り形式です。
サンプルファイル

a       1       2       4       7       9
b       0.5     0.9     6       10      3
c       3       5       12      7       9
d       0.9     6       7       4       10

答え1

Awk では、フィールド (列) をループして、それぞれをテストします。行の最初の列は数値ではないため、2 番目の列 ( i=2) から開始します。

それで

awk '{for(i=2;i<=NF;i++){if($i+0 < 1) next}} 1' file

例:与えられた

$ cat example
a       1       2       4       7       9
b       0.5     0.9     6       10      3
c       3       5       12      7       9
d       7.96681779026634e-05     6       7       4       10

それから

$ awk '{for(i=2;i<=NF;i++){if($i+0 < 1) next}} 1' example
a       1       2       4       7       9
c       3       5       12      7       9

Perl では、最初の列をシフトアウトした後、grepデフォルトで配列を分割できます。@F

perl -ane 'shift @F; print unless grep { $_ < 1 } @F' file

関連情報