【shell】awk按域去除重复行

首先解释一下什么叫“按域去除重复行”:

有的时候我们需要去除的重复行并不是整行都重复,两行的其中一列的元素相同我们有的时候就需要认定这两行重复,因此有了今天的内容。

去除重复行shell有一个原生命令但是不太好使应为这个命令找的重复行是上下文的重复行,也就是说需要提前排序,这样就增加了不必要的麻烦,我们在这里选择使用awk工具进行重复行的去除。

命令如下:

awk '!array[$0]++' Filename

解释一下这行代码,由于awk工作方式的特殊性,也就是按行读入按行输出,中间引号内的语句就是以[$0]为元素去map剩下的行,$0代表整行,把0换成数字就是行的index,!表示如果存在相同行就跳过,没有相同行才要输出,++是迭代过程。

另外,如果要将结果重定向到文件中,需要使用shell的文件O/I符号">"进行操作。

扩展:如果我们要找两个或者多个列相同的行怎么办?

在定义[]的时候我们可以如下写法:

awk '!array[$1,$2]++' Filename

这样就可以鉴别两列相同的行,多列亦如此。

转载于:https://www.cnblogs.com/muuyouzhi/p/10224928.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值