文字のない行に文字を追加する方法

文字のない行に文字を追加する方法

私のデータの最初の数行は次のとおりです。

scaffold10x_1   AUGUSTUS    gene    3591    3908    0.61    -   .   g1
scaffold10x_1   AUGUSTUS    transcript  3591    3908    0.61    -   .   g1.t1
scaffold10x_1   AUGUSTUS    stop_codon  3591    3593    .   -   0   transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1   AUGUSTUS    CDS 3591    3908    0.61    -   0   transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1   AUGUSTUS    exon    3591    3908    .   -   .   transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1   AUGUSTUS    start_codon 3906    3908    .   -   0   transcript_id "g1.t1"; gene_id "g1";

";最後の列で欠落している行に追加する必要があります。grep -v transcript_id canada.gtf | grep -v "^#"行方不明を識別することに慣れています。これを行うためにLinuxコマンドを使用できますか?

答え1

sed方法:

sed 's/[^[:space:]]\+[^;[:space:]]$/"&";/' file

出力:

scaffold10x_1   AUGUSTUS    gene    3591    3908    0.61    -   .   "g1";
scaffold10x_1   AUGUSTUS    transcript  3591    3908    0.61    -   .   "g1.t1";
scaffold10x_1   AUGUSTUS    stop_codon  3591    3593    .   -   0   transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1   AUGUSTUS    CDS 3591    3908    0.61    -   0   transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1   AUGUSTUS    exon    3591    3908    .   -   .   transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1   AUGUSTUS    start_codon 3906    3908    .   -   0   transcript_id "g1.t1"; gene_id "g1";

答え2

このsedコマンドは、各行がセミコロンで終わり、各行の最後の単語を引用符で囲むようにします。

sed -e 's/"\?\([a-z0-9.]\+\)"\?;*$/"\1";/' canada.gtf

以下はコマンドの出力です。

scaffold10x_1   AUGUSTUS    gene    3591    3908    0.61    -   .   "g1";
scaffold10x_1   AUGUSTUS    transcript  3591    3908    0.61    -   .   "g1.t1";
scaffold10x_1   AUGUSTUS    stop_codon  3591    3593    .   -   0   transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1   AUGUSTUS    CDS 3591    3908    0.61    -   0   transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1   AUGUSTUS    exon    3591    3908    .   -   .   transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1   AUGUSTUS    start_codon 3906    3908    .   -   0   transcript_id "g1.t1"; gene_id "g1";

ファイルを適切に変更するには、次の-iフラグを使用できます。

sed -i -e 's/"\?\([a-z0-9.]\+\)"\?;*$/"\1";/' canada.gtf

各行が次に終わるかどうかを確認したい場合(そして行の最後の単語の先頭で一致が発生したくない";場合)、次のものを使用できます。"

sed -e 's/"\?;\?$/";/' canada.gtf

以下はコマンドの出力です。

scaffold10x_1   AUGUSTUS    gene    3591    3908    0.61    -   .   g1";
scaffold10x_1   AUGUSTUS    transcript  3591    3908    0.61    -   .   g1.t1";
scaffold10x_1   AUGUSTUS    stop_codon  3591    3593    .   -   0   transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1   AUGUSTUS    CDS 3591    3908    0.61    -   0   transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1   AUGUSTUS    exon    3591    3908    .   -   .   transcript_id "g1.t1"; gene_id "g1";
scaffold10x_1   AUGUSTUS    start_codon 3906    3908    .   -   0   transcript_id "g1.t1"; gene_id "g1";

答え3

@Kay NewEdge ダラモラ

次のオネライナーを使用して結果を得ました。

パスワード:


sed  's/[a-z][0-9]$/&";/g' example.txt |sed 's/[a-z][0-9].\{2\}/"&/g'

出力


scaffol"d10x_1   AUGUSTUS    gene    3591    3908    0.61    -   .   "g1";
scaffol"d10x_1   AUGUSTUS    transcript  3591    3908    0.61    -   .   "g1.t1";
scaffol"d10x_1   AUGUSTUS    stop_codon  3591    3593    .   -   0   transcript_id ""g1.t1"; gene_id ""g1";
scaffol"d10x_1   AUGUSTUS    CDS 3591    3908    0.61    -   0   transcript_id ""g1.t1"; gene_id ""g1";
scaffol"d10x_1   AUGUSTUS    exon    3591    3908    .   -   .   transcript_id ""g1.t1"; gene_id ""g1";
scaffol"d10x_1   AUGUSTUS    start_codon 3906    3908    .   -   0   transcript_id ""g1.t1"; gene_id ""g1";  

関連情報