我有一个包含序列ID的文本文件。这些Ids文件包含一些重复的ID。在此文件中,很少有ID也会出现2次以上。我想在一个文件中找到唯一的ID,在另一个文件中找到重复的ID。此外,我也有兴趣找到数字,文件中重复ID的次数。
我使用以下命令找到重复的序列
$ cat id.txt | grep '^>' | sort | uniq -d > dupid.txt
这给了我“dupid.txt”文件中的重复序列。但是,如何让那些存在超过2次且存在多少次?其次,我如何找到独特的序列?
答案 0 :(得分:0)
可能会发现一些搜索this answer,其中有许多关于uniq
的传统用法的建议。
另外,请注意:
$ cat id.txt | grep '^>'
...基本上与:
相同$ grep '^>' id.txt
但是对于你的问题 - 找到带有计数的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