私のデータの最初の数行は次のとおりです。
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";