我有一个文件 (.gff3),其中有九列,由制表符分隔。
##gff-version 3
##other information
0 . mRNA 1300 9000 . + . ID=mrna0001;Name=sonichedgehog
1 . exon 1300 1500 . + . ID=exon00001;Parent=mrna0001
2 . exon 1050 1500 . + . ID=exon00002;Parent=mrna0001
3 . exon 3000 3902 . + . ID=exon00003;Parent=mrna0001
4 . exon 5000 5500 . + . ID=exon00004;Parent=mrna0001
5 . exon 7000 9000 . + . ID=exon00005;Parent=mrna0001
我正在尝试从第一列以数字 5 开头的所有 9 列中获取所有信息。我的文件约为 450MB。
所以,我想从第 1-9 列的全部信息中得到这样的信息:
5 . exon 1300 1500 . + . ID=exon00001;Parent=mrna0001
5 . exon 1050 1500 . + . ID=exon00002;Parent=mrna0001
5 . exon 3000 3902 . + . ID=exon00003;Parent=mrna0001
5 . exon 5000 5500 . + . ID=exon00004;Parent=mrna0001
5 . exon 7000 9000 . + . ID=exon00005;Parent=mrna0001
我努力了
grep '5' [FILE].gff3 >[NEWFILE].txt
cut -d'5' -f1-9 [FILE].gff3
其中每一个都给我我的文件,但没有从数字 5 开始的第 1 列中的信息。因此,它的作用与我想要得到的相反。
答案1
要提取 5 号染色体的所有数据,您可以使用一个简单的awk
命令:
awk -F '\t' '$1 == "5"' file.gff3 >chr5.gff3
还包括 GFF 标头:
awk -F '\t' '/^#/ || $1 == "5"' file.gff3 >chr5.gff5
这些命令中的任何一个都会读取file.gff3
提取的数据并将其写入新文件chr5.gff3
。
您可以轻松地将其扩展为仅包含外显子:
awk -F '\t' '/^#/ || ($1 == "5" && $3 == "exon")' file.gff3 >chr5.gff5