負の数を無視する方法

負の数を無視する方法

次の例を考えてみましょう。

1 4.0 3.5 7.2
2 3.2 2.5 5.2
3 1.7 -1.8 2.9
4 4.1 2.5 5.7

負の数を無視してテーブルの3番目の列を抽出するには?

を使用すると、awk '{print $3}' filename4つの数字すべてが提供されます。しかし、私は羊水だけを取りたいと思います。つまり、最終出力は3つの数字でなければなりません。

3.5
2.5
2.5

どうすればいいですか?

答え1

質問に示すように、入力が純粋な数字であるとします。

awk '$3 >= 0 { print $3 }' file

ブロック前のテストは、ブロックが実行されるかどうかを決定します。この場合、テストは算術テストであり、次のようになります。本物フィールド 3 のデータが負でない場合。この場合、フィールドが出力されます。

答え2

3番目の列は数字または文字列として扱うことができます。awkコンテキストで必要な場合は、文字列から数値への暗黙的な変換があり、数値以外の値はゼロに等しく、数値以外のサフィックスは無視されます。

このソリューションでは数値比較はありません。文字列がマイナス記号で始まらないことを確認し、-この場合にのみ出力します。

awk '$3 !~ /^-/ {print $3}' filename

-(このソリューションは負でなくてもで始まる値をスキップします。たとえば、--00REを変更したり数値比較を強制したりすると、この問題は解決される可能性があります。数値のみが存在する場合はこの問題は発生しません。)

答え3

awk '$3 ~/^[0-9]/{print $3}' file.txt 

出力

3.5
2.5
2.5

関連情報