如何从txt文件中检索唯一ID?

时间:2015-07-29 14:21:47

标签: unix duplicates uniqueidentifier

我有一个包含序列ID的文本文件。这些Ids文件包含一些重复的ID。在此文件中,很少有ID也会出现2次以上。我想在一个文件中找到唯一的ID,在另一个文件中找到重复的ID。此外,我也有兴趣找到数字,文件中重复ID的次数。

我使用以下命令找到重复的序列

$ cat id.txt | grep '^>' | sort | uniq -d > dupid.txt

这给了我“dupid.txt”文件中的重复序列。但是,如何让那些存在超过2次且存在多少次?其次,我如何找到独特的序列?

1 个答案:

答案 0 :(得分:0)

可能会发现一些搜索this answer,其中有许多关于uniq的传统用法的建议。

另外,请注意:

$ cat id.txt | grep '^>'

...基本上与:

相同
$ grep '^>' id.txt

所谓的"Useless Use Of Cat"

但是对于你的问题 - 找到带有计数的uniq id,dupes和dupes - 这里尝试使用处理其stdin的awk,并写入用户必须命名的三个输出文件,试图避免已经存在的clobbering输出文件。一次通过,但在开始输出之前将所有输入保存在内存中。

#!/bin/bash

[ $# -eq 3 ] || { echo "Usage: $(basename $0) <uniqs> <dupes> <dupes_counts>" 1>&2; exit 1; }

chk() {
  [ -e "$1" ] && { echo "$1: already exists" 1>&2; return 1; }
  return $2
}

chk "$1" 0; chk "$2" $?; chk "$3" $? || exit 1

awk -v u="$1" -v d="$2" -v dc="$3" '
  {
    idc[$0]++
  }
  END {
    for (id in idc) {
      if (idc[id] == 1) {
        print id >> u
      } else {
        print id >> d
        printf "%d:%s\n", idc[id], id >> dc
      }
    }
  }
'

另存为(例如)&#34; doit.sh&#34;,然后通过以下方式调用:

$ grep '^>' id.txt | doit.sh uniques.txt dupes.txt dupes_counts.txt