ダッシュでつながった遺伝子名を分けたいです。タグに変えたいです。
私の入力ファイルは次のとおりです
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