シェルを使用してファイルの偶数行と2番目の列の文字列を置き換える

シェルを使用してファイルの偶数行と2番目の列の文字列を置き換える

手動で生成されたgffファイルがあります。各行は繰り返され、各偶数行の2番目の列で文字列 "gene"を文字列 "cds"に置き換える必要があります。

私のファイルは次のとおりです。

NC_002929.2 Seq gene    3653563 3653611 .   +   .   Pred285
NC_002929.2 Seq gene    3653563 3653611 .   +   .   Pred285
NC_002929.2 Seq gene    2902987 2903162 .   -   .   rgtA
NC_002929.2 Seq gene    2902987 2903162 .   -   .   rgtA

私はそれが次のように見えるようにしたいです:

NC_002929.2 Seq gene    3653563 3653611 .   +   .   Pred285
NC_002929.2 Seq cds     3653563 3653611 .   +   .   Pred285
NC_002929.2 Seq gene    2902987 2903162 .   -   .   rgtA
NC_002929.2 Seq cds     2902987 2903162 .   -   .   rgtA

実際のファイルはこれよりはるかに大きいです。これはほんの一例です。誰でも私を助けることができますか?

ベストアンサー1

GNU sedがあると仮定nスキップmアドレス演算子であり、文字列はgene2番目の列の前にどこにも表示できません。

sed '2~2s/gene/cds/' file.gff

sedには「熱」という本質的な概念はありません。2~2ここでは2つの列を意味します。ワイヤー2日から始まるワイヤーgene、一致する行の最初の項目を置き換えます。


最後の「列」に置換を適用するには、行の末尾に固定の空白以外の文字を一致させるなどの操作を実行する必要があります。

sed -r '2~2{s/gene/cds/; s/[^[:blank:]]+$/ID=&/;}' file.gff

真の熱指向のものが必要な場合は、awk、perl、またはmillerを試してください。

おすすめ記事