awk根据某列内容去重

awk '!a[$1" "$2]++{print}' text.txt

原理

  1. ”!” 非
  2. a[$0],以$0为数据下标,建立数组a
  3. a[$0]++,即给数组a赋值,a[$0]+=1

转载:
这样子就能将文件里重复的东西打印出来,$1取决于重复的列,如果是第二列就是$2。那为什么要这么写呢?
我们知道如果awk的表达式为0则不会打印,非0则打印,这个可以这样试试 awk ‘0’ yourfile,这样是不会打印的。好了回到这个a[$1],这是一个数组,一个以$1为下标的数组,假设我们$1分别是a b c d e,这些字母,当第一个为a[a]的时候,值是0,awk打印出$1,然后处理下一个$1 . 因为awk里面没定义的变量初值都是0,然后++,这时候变成1,如果后续没有a的出现,那就是说a[a]一直都是1,但如果有a出现,则a[a]还会增加,这时候是非0值,因为前面的!的取反作用,本来需要打印的现在不需要打印了。
所以这个命令会输出文件里面所有不重复的数据,重复的数据也只输出一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值