使用awk提取特定模式

时间:2018-04-20 15:13:09

标签: awk extract gff

我解释了我的问题。

我有一个gff格式的大文件,以便:

scaffold_31 AUGUSTUS    CDS 18857   19210   0.63    +   0   transcript_id "g56.t1"; gene_id "g56";
scaffold_32 AUGUSTUS    CDS 8973    9290    0.82    -   0   transcript_id "g57.t1"; gene_id "g57";
scaffold_32 AUGUSTUS    CDS 11374   11507   0.96    -   2   transcript_id "g57.t1"; gene_id "g57";
scaffold_32 AUGUSTUS    CDS 11586   11733   0.39    -   0   transcript_id "g57.t1"; gene_id "g57";
scaffold_33 AUGUSTUS    CDS 5303    5323    0.83    -   0   transcript_id "g58.t1"; gene_id "g58";
scaffold_33 AUGUSTUS    CDS 5810    6034    0.97    -   0   transcript_id "g58.t1"; gene_id "g58";
scaffold_34 AUGUSTUS    CDS 1390    1805    0.87    +   1   transcript_id "g59.t1"; gene_id "g59";
scaffold_37 AUGUSTUS    CDS 15299   15390   0.91    -   2   transcript_id "g60.t1"; gene_id "g60";
scaffold_37 AUGUSTUS    CDS 15622   15826   0.88    -   0   transcript_id "g60.t1"; gene_id "g60";
等等... 而且我想找到一个命令来提取transcrit,其中第一个CDS以密码子阶段0(第7列)开始,以及他们的第一个CDS以1或2开始的那些。然后,我会喜欢得到3个文件,这里是:

第一个文件:成绩单的第一张CDS从第0阶段开始。

scaffold_31 AUGUSTUS    CDS 18857   19210   0.63    +   0   transcript_id "g56.t1"; gene_id "g56";
    scaffold_32 AUGUSTUS    CDS 8973    9290    0.82    -   0   transcript_id 
scaffold_32 AUGUSTUS    CDS 8973    9290    0.82    -   0   transcript_id "g57.t1"; gene_id "g57";
scaffold_33 AUGUSTUS    CDS 5303    5323    0.83    -   0   transcript_id "g58.t1"; gene_id "g58";
    scaffold_33 AUGUSTUS    CDS 5810    6034    0.97    -   0   transcript_id "g58.t1"; gene_id "g58";

第二阶段,第一阶段的第一张CDS开始于第一阶段:

scaffold_34 AUGUSTUS    CDS 1390    1805    0.87    +   1   transcript_id "g59.t1"; gene_id "g59";

第三阶段的成绩单第一张CDS从第二阶段开始:

scaffold_37 AUGUSTUS    CDS 15299   15390   0.91    -   2   transcript_id "g60.t1"; gene_id "g60";
    scaffold_37 AUGUSTUS    CDS 15622   15826   0.88    -   0   transcript_id "g60.t1"; gene_id "g60";

正如您所看到的,由于transmple transcript_id“g60.t1的transcrit的第一个CDS从第2阶段开始,所有属于此转录本的CDS必须转移到同一个文件。

感谢您的帮助,我希望有人能找到解决方案:)?我认为awk可以提供帮助吗?

1 个答案:

答案 0 :(得分:0)

awk救援!

$ awk '!($1 in a){fn = "phase_"$8; a[$1]} {print > fn}' file

我认为你的意思是第8列。