Linux学习笔记(六)

mark

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
Researcher

I am a PhD student of Crop Genetics and Breeding at the Zhejiang University Crop Science Lab. My research interests covers a range of issues:Population Genetics Evolution and Ecotype Divergence Analysis of Oilseed Rape, Genome-wide Association Study (GWAS) of Agronomic Traits.

comments powered by Disqus