次の例を考えてみましょう。
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}' filename
4つの数字すべてが提供されます。しかし、私は羊水だけを取りたいと思います。つまり、最終出力は3つの数字でなければなりません。
3.5
2.5
2.5
どうすればいいですか?
答え1
質問に示すように、入力が純粋な数字であるとします。
awk '$3 >= 0 { print $3 }' file
ブロック前のテストは、ブロックが実行されるかどうかを決定します。この場合、テストは算術テストであり、次のようになります。本物フィールド 3 のデータが負でない場合。この場合、フィールドが出力されます。
答え2
3番目の列は数字または文字列として扱うことができます。awk
コンテキストで必要な場合は、文字列から数値への暗黙的な変換があり、数値以外の値はゼロに等しく、数値以外のサフィックスは無視されます。
このソリューションでは数値比較はありません。文字列がマイナス記号で始まらないことを確認し、-
この場合にのみ出力します。
awk '$3 !~ /^-/ {print $3}' filename
-
(このソリューションは負でなくてもで始まる値をスキップします。たとえば、--00
REを変更したり数値比較を強制したりすると、この問題は解決される可能性があります。数値のみが存在する場合はこの問題は発生しません。)
答え3
awk '$3 ~/^[0-9]/{print $3}' file.txt
出力
3.5
2.5
2.5