awk - 检查字段是否可以转换为整数

时间:2012-11-16 15:43:48

标签: awk

只有打印字段才能转换为整数

如果我有此示例文本文件

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; }

这不起作用。

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:9)

您可以使用模式进行匹配:

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

如果要允许负值,可以执行以下操作:

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

答案 1 :(得分:9)

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,即如果行中的字母转到下一行。