タブ区切りの列から特定の行を切り取るには?

タブ区切りの列から特定の行を切り取るには?

タブで区切られた9つの列を持つファイル(.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

これらのコマンドの1つは抽出されたデータを読み取り、file.gff3新しいファイルに書き込みますchr5.gff3

エクソンのみを含めるように簡単に拡張できます。

awk -F '\t' '/^#/ || ($1 == "5" && $3 == "exon")' file.gff3 >chr5.gff5

おすすめ記事