56gt 发表于 2018-8-27 07:24:25

shell不排序去重

  转载:http://blog.csdn.net/challenge_c_plusplus/article/details/23053573
  一条命令搞定:
  
  awk '!a[$0]++' file
  如果是第一次出现a[$0]++的值为0(假),而!a[$0]++的值就为1(真),之后就执行print $0
  第二次或者两次以上的出现a[$0]++的值就为大于0的整数值(真),例如1,2,3...,而!a[$0]++的值就为0(假),之后就不执行print $0操作
  awk '!($0 in a){a[$0];print $0}'
  pattern为!($0 in a),Action为{a[$0];print $0}
  分析:
  1.执行第一行时的a的数组为空,($0 in a)为假,!($0 in a)为真。执行Action,a[$0]就存在了a,打印第一行
  2.执行第二行时的a的数组为a,如果a 是a[$0]中的元素,!($0 in a)为真为假,不执行Ation。如果a不是a[$0]中的元素,执行Action,a[$0]中增加元素(a,a),打印第二行。
  3.重复执行类似的第二步骤。达到的去重的效果。

页: [1]
查看完整版本: shell不排序去重