删除冗余数据

时间:2011-07-26 13:31:37

标签: bash shell

我有一个看起来像这样的文件(3列和n行)

chr8    101999980   102031975
chr8    101999980   102033533 
chr8    101999980   102033533 
chr8    101999980   102032736 
chr8    101999980   102034799 
chr8    101999980   102034799 
chr8    101999980   102034397
chr8    101999980   102032736

从这些数据中我想删除多余的行,这些精确的重复数据可以使用bash脚本存在于此数据集的任何位置。

3 个答案:

答案 0 :(得分:4)

如果维持订单很重要:

awk '!c[$0]++' filename

这可以理解如下:

  • 将每一行推送为数组键(c[$0]),
  • 后递增(++)保持此类行数的值,
  • 仅在之前从未见过该行时执行默认操作(!
    • n++返回0,如果n未设置则返回false
    • 默认操作为{print}

答案 1 :(得分:3)

您可以通过sortuniq

来管理文件
$ sort yourFile | uniq > newFile

答案 2 :(得分:1)

sort yourfile | uniq > outputfile

如果订单无关紧要。

它适用于相邻的相同行,这就是你需要排序的原因。在您的文件中,您不需要排序,因为重复项紧挨着彼此。如果这不是标准情况,则需要先对文件进行排序。

$ uniq yourfile | wc -l
6
$ sort yourfile | uniq | wc -l
6

有和没有排序都返回6行,但你没有说它是默认值。