这个人花了我一晚的睡眠。防止awk将字符串从0开始转换为oct0
假设你有一个文件a_file.txt如下。
1000 JUC_0000 1
2494 JUC_AAAA 2
2495 JUC_BBBB1 3
2495 JUC_BBBB2 4
4676 JUC_CCCC 5
4677 JUC_DDDD1 6
4677 JUC_DDDD2 7
如果运行
awk '{if($1==4677){print $0;}}' a_file.txt
你得到你所期望的:
4677 JUC_DDDD1 6
4677 JUC_DDDD2 7
但是,如果你运行
awk '{if($1==04677){print $0;}}' a_file.txt
你可能是(我是)惊喜地得到
2495 JUC_BBBB1 3
2495 JUC_BBBB2 4
看来发生的事情是,awk将04677解释为2495的八进制表示形式,并与它一起运行。
两个问题:
- 是我的结果的理解是否正确?
- 有没有一种方法可以防止awk将以0开头的数字解释为八进制数字,并使用它们的小数解释代替?
- gawk是否有相同的行为,是否可以改变它? 开始带前导零
'我对结果的解释是否正确?'是的,您的解释是正确的 –
'(2)'只有我能想到'$ 1 == int(“04677”)'...... –
' gawk有同样的行为吗?是的......'是否有可能改变它?'不知道 –