10

整数に変換できる場合にのみフィールドを印刷します

このサンプルテキストファイルがある場合

1 cat
2 dog
3 7
4 fish5
5 22

awkスクリプトで、フィールドを整数に変換できる場合にのみフィールドを出力したいと思います。

行1、2、4を印刷したくありません。

awkスクリプトの例

BEGIN {
   print "testing conversion to integer on " ARGV[1];
   myinteger = 0;  # my atmept to force this var to an integer
}
 myinteger = $2;
 myinteger != 0 { print $2; }

これは機能しません。

どうすればこれを機能させることができますか?

4

2 に答える 2

10

Awkには文字列の計算に問題があるため、次のようになります。

awk '$2 + 0 == $2' file.txt

3    7
5    22

これは私にとってもうまくいきます:awk '$2 + 0' file.txt

しかし、Ed Mortonがコメントで指摘したように、これには数字で始まる文字列も含まれるため、おそらくこれはより正しいでしょう。awk '/[a-z]/{next}{print $0}' file.txtつまり、行の文字が次の行に移動する場合です。

于 2012-11-16T17:22:30.100 に答える
9

パターンを使用して一致させることができます。

awk '$2 ~ /^[0-9]+$/'

負の値を許可する場合は、次のように実行できます。

awk '$2 ~ /^-?[0-9]+$/'
于 2012-11-16T15:50:33.523 に答える