0

我解释我的问题。

我有一个 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";

依此类推......我想找到一个命令来提取他们的 FIRST CDS 以密码子阶段 0(第 7 列)开头的一侧转录本,以及他们的 FIRST CDS 以 1 或 a 开头的那些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";

第三个是从第 2 阶段开始的成绩单的第一个 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";

如您所见,由于示例 transcript_id "g60.t1 的转录本从第 2 阶段开始具有其第一个 CDS,因此必须将属于该转录本的所有后续 CDS 转移到同一个文件中。

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

4

1 回答 1

0

awk救援!

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

我想你的意思是第 8 栏。

于 2018-04-20T17:02:32.673 回答