本文主要介紹一下 linux 下 uniq 命令的簡單用法。linux
總的來講,uniq 就是把重複的看成一個看待,也就是單一化。less
下面經過一個小例子進行介紹code
好比 文件 all.gtf:awk
$ less all.gtf chr1 exon gene_id "LOC_Os01g01050"; chr1 exon gene_id "LOC_Os01g01050"; chr1 stop_codon gene_id "LOC_Os01g01050"; chr1 start_codon gene_id "LOC_Os01g01060"; chr1 exon gene_id "LOC_Os01g01060"; chr1 exon gene_id "LOC_Os01g01060"; chr1 exon gene_id "LOC_Os01g01060"; chr1 exon gene_id "LOC_Os01g01060"; chr1 stop_codon gene_id "LOC_Os01g01060"; chr1 start_codon gene_id "LOC_Os01g01070"; chr1 exon gene_id "LOC_Os01g01070"; chr1 exon gene_id "LOC_Os01g01070"; ...
咱們發現第4列中爲基因的id, 可是因爲有多個外顯子,因此id不少都是重複。
如今第一個問題就是 在這個文件中有多少個 id,其中重複的算爲一個?sort
能夠利用 uniq 命令解決:top
$ wc all.gtf -l 444955 all.gtf $ cat all.gtf | awk '{print $4}' | sort | uniq | wc -l 55986
其中, awk '{print $4}' 指的是提取第4列
後面, sort|uniq 通常都一塊兒使用,由於 uniq 只對相鄰的重複進行處理
從結果來看, 該文件有 444955 行, 但惟一 的id 的數量只有 55986 個。文件
第二個問題是有多少個id 是沒有重複的?co
$ cat all.gtf | awk '{print $4}' | sort | uniq -u | wc -l 0
其中 uniq -u 指的是隻打印惟一,不重複的行
從結果來看沒有一個 id 是沒有重複的。block
也能夠這樣算:數字
$ cat all.gtf | awk '{print $4}' | sort | uniq -d | wc -l 55986
其中 uniq -d 指的是隻打印具備重複的行,結果也印證了上面的答案。
第三個問題是 對於每個 id, 它有幾個重複數?
$ cat all.gtf | awk '{print $4}' | sort | uniq -c | less 28 "LOC_Os01g01010"; 4 "LOC_Os01g01019"; 7 "LOC_Os01g01030"; 34 "LOC_Os01g01040"; 16 "LOC_Os01g01050"; 6 "LOC_Os01g01060"; 47 "LOC_Os01g01070"; 50 "LOC_Os01g01080"; 10 "LOC_Os01g01090"; 7 "LOC_Os01g01100"; 3 "LOC_Os01g01110"; 3 "LOC_Os01g01115"; ...
其中 uniq -c 指的是在每一行前面加上重複數 所以,從結果能夠看到,每個 id 前面的數字就是表明了它的重複數。