【问题标题】:using awk to extract a specific pattern使用 awk 提取特定模式
【发布时间】:2026-01-14 09:55:02
【问题描述】:

我解释我的问题。

我有一个 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 或 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 阶段开始的成绩单的第一个 CD:

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 可以提供帮助?

【问题讨论】:

    标签: awk extract gff


    【解决方案1】:

    awk 来救援!

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

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

    【讨论】:

    • 嗨,谢谢你的帮助,但是当我在我的文件上运行你的代码时,它实际上什么也没做,我得到一个文件完全相同的另一个文件,只是上面的标题来自第一个......