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