Unix中uniq
命令的用法比较简单,用来排除文本(或者标准化输入)中连续出现的重复值。用好这个命令可以在不将数据导入R或者Excel的情况下方便地对数据进行统计。
首先,我们以letters.txt
文件为例(如下)了解uniq的基本用法。
$ cat letters.txt
A
A
B
C
B
C
C
C
$ uniq letters.txt
A
B
C
B
C
由于uniq
只会排除掉连续出现的重复值,所以上面的用法并没有得到唯一值。更常用的操作组合是sort | uniq
:
$ cat letters.txt | sort | uniq
A
B
C
注:uniq可以通过-i参数忽视字母的大小写敏感
uniq
最重要参数是-c
,其反映了不同值出现的次数,方便统计:
$ cat letters.txt | sort | uniq -c
2 A
2 B
4 C
通过此用法我们可以统计小鼠参考基因组注释文件中基因的不同的特征出现数目:
$ grep -v "^#" Mus_musculus.GRCm38.75_chr1.gtf | cut -f3 | sort | uniq -c
25901 CDS
7588 UTR
36128 exon
2027 gene
2290 start_codon
2299 stop_codon
4993 transcript
可以在上述命令行的最后追加sort -nr
来根据出现数目由多到少进行排序:
$ grep -v "^#" Mus_musculus.GRCm38.75_chr1.gtf | cut -f3 | sort | uniq -c | sort -nr
36128 exon
25901 CDS
7588 UTR
4993 transcript
2299 stop_codon
2290 start_codon
2027 gene
也可以用来统计某一基因的不同特征出现数目:
$ grep "ENSMUSG00000033793" Mus_musculus.GRCm38.75_chr1.gtf | cut -f3 | sort | uniq -c
13 CDS
3 UTR
14 exon
1 gene
1 start_codon
1 stop_codon
1 transcript
因为uniq
统计的是一行的出现数目,我们也可以使用以下操作来统计多个列组合出现的数目,例如:
$ grep -v "^#" Mus_musculus.GRCm38.75_chr1.gtf | cut -f3,7 | sort | uniq -c
12891 CDS +
13010 CDS -
3754 UTR +
3834 UTR -
18134 exon +
17994 exon -
1034 gene +
993 gene -
1135 start_codon +
1155 start_codon -
1144 stop_codon +
1155 stop_codon -
2482 transcript +
2511 transcript -
uniq
还有一个有用的参数-d
,用来保留重复出现的行:
$ uniq -d letters.txt
A
C
这样,我们还可以统计重复出现的行的数目:
$ uniq -d letters.txt | wc -l
2
网友评论