编辑注释文件中的特定列

时间:2018-11-26 21:47:10

标签: awk annotations

我正在尝试编辑注释文件。该表如下所示:

chr10   HAVANA  gene    92834713        93059493        .       +       .       gene_id "ENSG00000138190.16"
chr10   HAVANA  gene    92878092        92878289        .       -       .       gene_id "ENSG00000225118.1"
chr10   HAVANA  gene    93059663        93060426        .       -       .       gene_id "ENSG00000226425.1"
chr10   HAVANA  gene    93060808        93069536        .       +       .       gene_id "ENSG00000187553.8"

我想删除gene_id列中的基因'version',并获得类似"ENSG00000187553"而不是"ENSG00000187553.8"

的信息。
chr10   HAVANA  gene    92834713        93059493        .       +       .       gene_id "ENSG00000138190"
chr10   HAVANA  gene    92878092        92878289        .       -       .       gene_id "ENSG00000225118"
chr10   HAVANA  gene    93059663        93060426        .       -       .       gene_id "ENSG00000226425"
chr10   HAVANA  gene    93060808        93069536        .       +       .       gene_id "ENSG00000187553"

有什么想法我该怎么做? (使用awk或其他类似命令)

1 个答案:

答案 0 :(得分:1)

您可以替换以从最后一个字段中删除版本:

$ awk '{sub(/[.][0-9]+"/, "\"", $NF)}1' file
chr10 HAVANA gene 92834713 93059493 . + . gene_id "ENSG00000138190"
chr10 HAVANA gene 92878092 92878289 . - . gene_id "ENSG00000225118"
chr10 HAVANA gene 93059663 93060426 . - . gene_id "ENSG00000226425"
chr10 HAVANA gene 93060808 93069536 . + . gene_id "ENSG00000187553"

由于所讨论的字段是最后一个字段,因此如注释中所指出的那样,更好的选择是将行视为一个整体,并以此方式保留原始间距:

$ awk '{sub(/[.][0-9]+"/, "\"")}1' file
chr10   HAVANA  gene    92834713        93059493        .       +       .       gene_id "ENSG00000138190"
chr10   HAVANA  gene    92878092        92878289        .       -       .       gene_id "ENSG00000225118"
chr10   HAVANA  gene    93059663        93060426        .       -       .       gene_id "ENSG00000226425"
chr10   HAVANA  gene    93060808        93069536        .       +       .       gene_id "ENSG00000187553"