如何从制表符分隔的列中剪切特定行?

如何从制表符分隔的列中剪切特定行?

我有一个文件 (.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

相关内容