我想分隔由破折号连接的基因名称。我想用标签替换。
我的输入文件是:
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
。