- 论坛徽章:
- 0
|
原帖由 roong 于 2009-1-19 19:17 发表 ![]()
>>cat input.file
10| 2
30| 3
10| 4
20| 7
>>awk '$2=" ";1' input.file
10|
10|
30|
30|
10|
10|
20|
20|
>>awk '$2="";1' input.file
10|
30|
10|
20|
为什 ...
awk '$2=" ";1' input.file
等效于:
awk '($2=" "){print $0}
(1){print $0}' input.file
每行会执行两次条件判断,活动为全部缺省的print $0;
第1次的条件是赋值的结果,为" ",非空字符串,值为0.
有的系统当值非零或字符串非空时均作为条件真来处理,这时为真(楼主的系统认为值为0的非空字符串为条件真,我的系统也是).
也可能有的系统只认数值非0才是条件真,这时就是假了.
如果你的awk版本认为非空字符串为逻辑真时,两个条件均为恒真,所有行均被两次用缺省活动分别打印两次.
如果你的awk版本认为只有非0数值表达式才是逻辑真时,第1条件均为恒假,第2个条件为恒真.所有行被第2个条件对应的缺省活动打印1次.
awk '$2="";1' input.file
等效于:
awk '($2=""){print $0}
(1){print $0}' input.file
条件为空字符时,一定为逻辑假,第1个条件不成立,第2个条件恒为真.所有行被第2个条件对应的缺省活动打印1次.
[ 本帖最后由 zhangshebao 于 2009-1-20 01:56 编辑 ] |
|