Linux uniq —— 如何删除某一列重复的行?


  linux uniq命令怎样将文件中某一列重复的行删除?


  例如文件 number1.txt 中存储了你的电话簿信息,其中第一列是联系人,第二列是手机号码。电话簿中存在一个人有多个手机号码的情况,但你只想让每个人仅保留一个手机号码,将多余的手机号去除。

number1.txt :

Li 13800001115
Li 13800001112
Zhang 13800001118
Wang 13800001112
Zhang 13800001114
Wu 13800001113

这时候可以分三步完成:
第一步,将你要筛选的列放到最后,方便排重

awk '{printf("%s %s\n", $2, $1)}' number1.txt > number2.txt

number2.txt :

13800001115 Li
13800001112 Li
13800001118 Zhang
13800001112 Wang
13800001114 Zhang
13800001113 Wu

第二步,利用 sort + uniq 命令去除重复的行

sort -k 2 number2.txt | uniq -f 1 > number3.txt

  sort -k 2 是将 number2.txt 根据第二列的值进行排序,列的分隔符默认是空白字符。 在使用 uniq 命令前先需要排序,因为当重复的行并不相邻时,uniq 命令是不起作用的。 uniq -f 1 选项是 比较时跳过前 1 列,这样就能根据第2列的值是否相同去排重了。

number3.txt :

13800001112 Li
13800001112 Wang
13800001113 Wu
13800001114 Zhang

第三步,还原文件格式

awk '{printf("%s %s\n", $2, $1)}' number3.txt > number1.txt

number1.txt :

Li 13800001112
Wang 13800001112
Wu 13800001113
Zhang 13800001114

  最终大功造成啦!可能你的文件中每一列使用的分隔符不是默认的空白符,这时候也不用担心,你完全可以用 awk 命令将你的分隔符替换成空白符即可,同样,还原的时候只需要执行逆过程而已。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值