awk读取输入数字时对进制的判断问题
2010-07-26 17:35
211 查看
考虑以下需求,用awk获取数值范围内的文件:
结果出错了?问题出在哪里呵
在不理解的情况下,有人试用了双引号:
结果正确。
考虑下$1的实际数值:
说明,这边$1读进去是十进制,读进0405,是十进制405,
而表达式里的0624,实际上是解释成八进制,值是404
所以才有这样的结果
如何让输入接入八进制和十六进制?
看看gnu awk的man有这句:
--non-decimal-data
Recognize octal and hexadecimal values in input data. Use this option with great caution!
再看看加不加的区别
默认情况下是按十进制输入的
加个参数就可以支持八进制和十六进制了
不过还是要分析好数据,以防不慎
另外,加双引号也是可以的,不过
,只不过转化成按字符比较了,
不过用字符问题,是
"12"比"2"小
[root@rac0 testls]# touch 0405.log 0406.log 0623.log 0624.log 0625.log 0724.log 0725.log 0726.log [root@rac0 testls]# ls -l 总计 32 -rw-r--r-- 1 root root 0 07-25 18:39 0405.log -rw-r--r-- 1 root root 0 07-25 18:39 0406.log -rw-r--r-- 1 root root 0 07-25 18:39 0623.log -rw-r--r-- 1 root root 0 07-25 18:39 0624.log -rw-r--r-- 1 root root 0 07-25 18:39 0625.log -rw-r--r-- 1 root root 0 07-25 18:39 0724.log -rw-r--r-- 1 root root 0 07-25 18:39 0725.log -rw-r--r-- 1 root root 0 07-25 18:39 0726.log [root@rac0 testls]# ls |awk -F'[.]' '$1 >0624 && $1<0725' 0405.log 0406.log
结果出错了?问题出在哪里呵
在不理解的情况下,有人试用了双引号:
[root@rac0 testls]# ls |awk -F'[.]' '$1 >"0624" && $1<"0725"' 0625.log 0724.log
结果正确。
考虑下$1的实际数值:
[root@rac0 testls]# ls |awk -F'[.]' '{print $1,$1-624}' 0405 -219 0406 -218 0623 -1 0624 0 0625 1 0724 100 0725 101 0726 102 [root@rac0 testls]# ls |awk -F'[.]' '{print $1,$1-0624}' 0405 1 0406 2 0623 219 0624 220 0625 221 0724 320 0725 321 0726 322
说明,这边$1读进去是十进制,读进0405,是十进制405,
而表达式里的0624,实际上是解释成八进制,值是404
所以才有这样的结果
如何让输入接入八进制和十六进制?
看看gnu awk的man有这句:
--non-decimal-data
Recognize octal and hexadecimal values in input data. Use this option with great caution!
再看看加不加的区别
[root@rac0 testls]# ls |awk --non-decimal-data -F'[.]' '{print $1,$1-0624}' 0405 -143 0406 -142 0623 -1 0624 0 0625 1 0724 64 0725 65 0726 66 16:28:05 -388 Elapsed -404 [root@rac0 testls]# ls |awk -F'[.]' '{print $1,$1-0624}' 0405 1 0406 2 0623 219 0624 220 0625 221 0724 320 0725 321 0726 322
默认情况下是按十进制输入的
加个参数就可以支持八进制和十六进制了
不过还是要分析好数据,以防不慎
另外,加双引号也是可以的,不过
,只不过转化成按字符比较了,
不过用字符问题,是
"12"比"2"小
[root@rac0 testls]# awk 'BEGIN{a=12>2?0:1; print a;}' 0 [root@rac0 testls]# awk 'BEGIN{a="12">"2"?0:1; print a;}' 1
相关文章推荐
- JS判断只能输入数字问题
- Android中判断输入的字符串是否为数字,可以解决如输入为点出现的问题
- 判断是否输入全角数字,解决部分客户银行账号输入的问题
- 刚学java的小白想问个关于读取键盘输入数字的问题
- [UI控件问题] 判断UITextField的输入只为数字的方法
- 随意输入一个正整数n, 在输入转化的进制数,将转化后的序列输出,并判断某一个数字的个数,这里给的是二进制的例子
- input只能输入数字,对数字进行判断,且修复IE下无法使用光标,无法中间输入的问题
- 读取数字的循环,用cin表达式的值判断错误输入并清除cin流接受新的输入
- 【前端】输入金额时如何判断数字合法
- C#判断输入的字符十分偶为小写,大写,或数字。
- js+html空间数据编码问题--以姓名为例(代码设涉及文件读取,文本数字提取,特别是文本x,y坐标的提取)
- python计算输入的两个数字,try...except...判断是否输入的是数字,如果是则相加
- 用正则表达式判断输入的数字是否合法的例子
- C#------如何判断输入的是否为纯数字
- 04_N阶楼梯上楼问题、输入一个ip地址串,判断是否合法、输入一个四行五列的矩阵,找出每列最大的两个数
- JAVA中如何判断一个输入是数字(小数和整数)还是字符串?
- python中raw_input输入数字问题
- 每日总结(二)C#判断输入内容为数字、Sharepoint回收应用程序池错误、Asp.Net 会发或回调参数无效、DropDownList动态绑定且设置默认选择项
- 文本框失去焦点后js判断输入是否为数字
- Python中判断输入是否为数字的实现代码