Linux学习笔记(六)
uniq
linux命令uniq
可以将连续重复去除掉,举个例子说明:
$ cat letters.txt
A
A
B
C
B
C
C
C
里面存有重复数据,利用uniq
可以有效的去除连续重复:
$ uniq letters.txt
A
B
C
B
C
可以看到只有连续重复才被执行只剩下一个,如果我们要去除所有的重复只保留一个,不管是不是连不连续,可以先进行排序再去重
$ sort letters.txt|uniq
A
B
C
如果存在大小写字母,可以添加参数-i来忽略大小写。还有一个选项-c可以用来统计连续重复次数,同理要统计所有重复次数先进行排序:
$ uniq -c letters.txt
2 A
1 B
1 C
1 B
3 C
# sort then uniq
$ sort letters.txt|uniq -c
2 A
2 B
4 C
再来一个,统计gtf文件中CDS、UTR等数目:
$ grep -v "^#" Mus_musculus.GRCm38.75_chr1.gtf|cut -f3|sort|uniq -c|column -t
25901 CDS
36128 exon
2027 gene
2290 start_codon
2299 stop_codon
4993 transcript
7588 UTR
根据数目从大到小进行排序:
$ grep -v "^#" Mus_musculus.GRCm38.75_chr1.gtf|cut -f3|sort|uniq -c|sort -rn |column -t
36128 exon
25901 CDS
7588 UTR
4993 transcript
2299 stop_codon
2290 start_codon
2027 gene
再深入一点展示不停链上的数目
$ grep -v "^#" Mus_musculus.GRCm38.75_chr1.gtf|cut -f3,7|sort|uniq -c|sort -rn|column -t
18134 exon +
17994 exon -
13010 CDS -
12891 CDS +
3834 UTR -
3754 UTR +
2511 transcript -
2482 transcript +
1155 stop_codon -
1155 start_codon -
1144 stop_codon +
1135 start_codon +
1034 gene +
993 gene -
还可以查看特定基因上的CDS等数目
$ grep "ENSMUSG00000033793" Mus_musculus.GRCm38.75_chr1.gtf|cut -f3|sort|uniq -c|sort -rn |column -t
14 exon
13 CDS
3 UTR
1 transcript
1 stop_codon
1 start_codon
1 gene
参数选项-d提供了一个数据集中的重复项
$ uniq -d mm_gene_names.txt|wc -l
0
这个数据集中没有重复项!!!
Join
join顾名思义就是将不同数据集根据相同的列合并在一起,需要注意的是两个文件需要经过排序才能合并在一起,因此第一步需要检查数据集有没有排序,没有的话需要进行排序。 join基本语法:
join -1 <file_1_field> -2 <file_2_field> <file_1> <file_2>
其中file_1和file_2是两个需要合并的文件,file_1_field表示file_1中合并的列,file_2_field同理。
$ sort -k1,1 example.bed > example_sorted.bed
$ sort -c -k1,1 example_lengths.txt
经验证两个数据集都已经排过序了。
$ join -1 1 -2 1 example_sorted.bed example_lengths.txt > example_with_lengths.txt
$ cat example_with_lengths.txt|column -t
chr1 10 19 58352
chr1 26 39 58352
chr1 32 47 58352
chr1 40 49 58352
chr1 9 28 58352
chr2 35 54 39521
chr3 11 28 24859
chr3 16 27 24859
如果我们将example_lengths.txt中的chr3去除掉再进行合并,结果会怎么样呢?
$ head -n2 example_lengths.txt > example_lengths_alt.txt
$ join -1 1 -2 1 example_sorted.bed example_lengths_alt.txt
chr1 10 19 58352
chr1 26 39 58352
chr1 32 47 58352
chr1 40 49 58352
chr1 9 28 58352
chr2 35 54 39521
结果发现chr3被join剔除掉了,因此join只会合并文件共有的项,如果想要保留chr3可以添加参数选项-a实现:
$ join -1 1 -2 1 -a 1 example_sorted.bed example_lengths_alt.txt|column -t
chr1 10 19 58352
chr1 26 39 58352
chr1 32 47 58352
chr1 40 49 58352
chr1 9 28 58352
chr2 35 54 39521
chr3 11 28
chr3 16 27