Awk-检查字段是否可以转换为整数
仅打印可转换为整数的字段 如果我有这个示例文本文件Awk-检查字段是否可以转换为整数,awk,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; myin
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; }
这不管用
我如何才能让它工作?您可以使用以下模式进行匹配:
awk '$2 ~ /^[0-9]+$/'
如果要允许负值,可以执行以下操作:
awk '$2 ~ /^-?[0-9]+$/'
Awk在计算字符串时遇到问题,因此:
awk'$2+0==$2'file.txt
3 7
5 22
这也适用于我:awk'$2+0'file.txt
3 7
5 22
但正如Ed Morton在评论中指出的,这也包括以数字开头的字符串,那么这可能更正确:
awk'/[a-z]/{next}{print$0}'file.txt
,即如果行中的字母转到下一行 谢谢,但这是我不想要的。我只想打印字符完全包含数字的字段。很抱歉,我尝试了第一个示例,但它现在不打印任何行。实际上,如果结尾没有$,它就可以工作。@user619818那么每行第二个字段的末尾都有一些控制字符cat-v文件
以查看它们。@VaughnCato:不需要`{print}`,awk默认情况下会这样做。@EdMorton在我的测试输入文件中,第二列是最后一个字段,所以换行符在末尾。但我以为awk去掉了这个?你说“awk在计算字符串时有问题”是什么意思?你能举个例子吗?您发布的内容测试输入是实数,而不是整数。我看到OP选择了这个作为正确答案。它不是。$echo“1e2”| awk'$1+0==$1'
生成输出1e2
。输入“1.2”也可以试试。你是对的。Awk是弱类型的。变量没有数据类型。我所说的问题是指问题。字符串+字符串!=数字。这不是唯一的问题,它还会将以数字开头的字符串截断为数字部分,因此,如果$2是3c,那么“$2+0”将是3,因此记录将打印。wrt发布的更新awk'/[a-z]/{next}{print$0}file.txt
,不需要{print$0}
您需要特别检查正在处理的字段$2,因此它应该写为'awk'$2~/[a-z]/{next}',但这将允许字段使用标点符号或其他非字母数字字符,并且存在其他问题。