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)
请问问题出在哪里?


...全文
321 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_34584629 2016-04-21
  • 打赏
  • 举报
回复
awk '{arr1[$0]++} END {for(str1 in arr.) {print str1,arr1[str1]}}' 可以看http://www.itshouce.com.cn/linux/linux-awk.html 中关于数组的使用

18,829

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧