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 回答