如何分隔由下划线连接的基因名称?

如何分隔由下划线连接的基因名称?

我想分隔由破折号连接的基因名称。我想用标签替换。

我的输入文件是:

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]_/似乎与您的情况匹配,因此我使用括号将其分成两个反向引用组,并打印第一组和一些空格,从而分隔您的列,然后可以使用column -t.

答案2

看起来您要替换的下划线总是在一个点.后跟一个数字[0-9]

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

这将搜索一个文字点,\.后跟一个数字,我们将其保存在一个组中,\([0-9]\)后跟一个下划线_。将其替换为一个点、我们保存的第一个组\1和一个 tab \t

相关内容