下線付きの遺伝子名をどのように区別しますか?

下線付きの遺伝子名をどのように区別しますか?

ダッシュでつながった遺伝子名を分けたいです。タグに変えたいです。

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

Cedr3g0570.1_XP_019283.1
Cedr4g7930.2_XP_019241.1
Cedr5g005170.1_C0LGS3.1
Cedr7g0290.5_XP_01921.1
CT35v5_contig_2082_1.6_XP_0272.1
CT35v5_Cedr2g060.1_GAU97.1
CT7New_004.1_XP_01996.1

しかし、私は次のような結果が欲しいです。

Cedr3g0570.1            XP_019283.1
Cedr4g7930.2            XP_019241.1
Cedr5g005170.1          C0LGS3.1
Cedr7g0290.5            XP_01921.1
CT35v5_contig_2082_1.6  XP_0272.1
CT35v5_Cedr2g060.1      GAU97.1
CT7New_004.1            XP_01996.1

問題は、CT35v5_contig_2082_1.6のように名前にダッシュがある遺伝子があるため、最初のダッシュを簡単に変更できないことです。私は試しましたが、sed 's/_/\t/'CT35v5_contig_2082_1.6などの一部の遺伝子では機能しません。

答え1

sed 's/\(\.[0-9]\)\(_\)/\1 /' inputfile | column -t

正規表現が/\.[0-9]_/あなたの場合と一致しているように見えるので、括弧を使用して2つの逆参照グループに分割し、最初のグループといくつかのスペースを印刷して列を分離して使用できますcolumn -t

答え2

変更したい下線は常にドット.の後に数字が続くようです[0-9]

sed 's|\.\([0-9]\)_|.\1\t|'

その後、テキストポイントと数字が順番に検索され、その後に下線が続く\.グループに保存されます。これをポイント、最初に保存したグループ、およびタブに置き換えます。\([0-9]\)_\1\t

関連情報