列の内容を変更する方法

列の内容を変更する方法

私はこの入力を持っています。

scaffold10x_1   AUGUSTUS    gene    72040   72306   0.67    -   .   g4
scaffold10x_1   AUGUSTUS    transcript  72040   72306   0.67    -   .   g4.t1
scaffold10x_1   AUGUSTUS    stop_codon  72040   72042   .   -   0   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    CDS 72040   72306   0.67    -   0   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    exon    72040   72306   .   -   .   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    start_codon 72304   72306   .   -   0   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    gene    72500   72970   0.99    -   .   g5
scaffold10x_1   AUGUSTUS    transcript  72500   72970   0.99    -   .   g5.t1
scaffold10x_1   AUGUSTUS    stop_codon  72500   72502   .   -   0   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    CDS 72500   72970   0.99    -   0   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    exon    72500   72970   .   -   .   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    start_codon 72968   72970   .   -   0   transcript_id "g5.t1"; gene_id "g5";

私はこのような出力をしたいと思います。

scaffold10x_1   AUGUSTUS    gene    72040   72306   0.67    -   .   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    transcript  72040   72306   0.67    -   .   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    stop_codon  72040   72042   .   -   0   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    CDS 72040   72306   0.67    -   0   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    exon    72040   72306   .   -   .   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    start_codon 72304   72306   .   -   0   transcript_id "g4.t1"; gene_id "g4";
scaffold10x_1   AUGUSTUS    gene    72500   72970   0.99    -   .   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    transcript  72500   72970   0.99    -   .   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    stop_codon  72500   72502   .   -   0   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    CDS 72500   72970   0.99    -   0   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    exon    72500   72970   .   -   .   transcript_id "g5.t1"; gene_id "g5";
scaffold10x_1   AUGUSTUS    start_codon 72968   72970   .   -   0   transcript_id "g5.t1"; gene_id "g5";

Linuxでsedコマンドを使用して目的の出力を取得するには?ありがとう、カイ

ベストアンサー1

一般に、代替ロジックといくつかの境界条件を説明するのが最善であるため、推測する必要はありません。そうではないので、いくつかの仮定をする必要があります。

  • g行の最後の列の後に数字(複数の場合があります)とオプション.t1(常に)が続く場合は、変更したいと1思います。
  • ラインにaがあってもなくても、十分でなければならず、あって.t1はなりません。transcript_id.t1gene_id
  • 列区切り記号は空白です。

この場合、次のスクリプトが機能するはずです。それ以外の場合は、次のように調整する必要があります。

sed -E 's/ (g[0-9]*)(\.t1)?$/ transscript_id "\1.t1"; gene_id "\1";/' yourfile

おすすめ記事