awk去重问题
释怀然已 2015-03-31 12:22:20 刚看awk
awk的工作流程 :
1.执行awk时, 它会反复进行下列四步骤.
2.自动从指定的数据文件中读取一个数据行.
3.自动更新(Update)相关的内建变量之值. 如 : NF, NR, $0...
4.依次执行程序中 所有 的 Pattern { Actions } 指令.
当执行完程序中所有 Pattern { Actions } 时, 若数据文件中还有未读取的数据, 则反复执行步骤1到步骤4.
awk会自动重复进行上述4个步骤, 使用者不须于程序中编写这个循环 (Loop).
-------------------------------------------------------------------------------------------------------------------------------------------------
也就是说每读取一行 -----》awk是先执行表达式再读取数据;
awk去重awk '!a[$0]++' file的执行也就是每执行一行之前都要执行下表达式'!a[$0]++;
假如file文件内容为
123
aaa
123
执行第一行是表达式为!a[$0]即!0 为1条件为真第一行打印
执行第二行是!和++结合性为自右向左 即为!(a[$0]+1)即!1为0条件为假,aaa不打印(实际file打印为123和aaa)
请问问题出在哪里?