我一直在尝试在我的文件中添加一个数字,以便我的所有CHRM都有三个数字:
Original Data
scaffold1.1|size30980855
scaffold10.1|size30980855
Output Data
scaffold001.1|size30980855
scaffold010.1|size30980855
正如您所看到的,我正在尝试使我的数值由三位数代码组成。我在考虑使用sed,但我不知道如何保持数字在另一边......这是我的意思的一个例子
sed 's/scaffold[0-9]*/scaffold00[0-9]*/g'
我在第二个括号中放置什么来保留最初的数字。
任何建议都将受到赞赏。
答案 0 :(得分:0)
如果perl
没问题
$ perl -pe 's/scaffold\K\d+/sprintf "%03d", $&/e' ip.txt
scaffold001.1|size30980855
scaffold010.1|size30980855
scaffold\K\d+
匹配前面有scaffold
/e
以便我们可以在替换部分中使用Perl代码sprintf "%03d", $&
将匹配的数字打印为3个字符宽的整数和零填充
使用sed
使用捕获组:
$ sed -E 's/(scaffold)([0-9]\.)/\10\2/; s/(scaffold)([0-9]{2}\.)/\10\2/' ip.txt
scaffold001.1|size30980855
scaffold010.1|size30980855
对于给定的问题,只需要更改两种情况
scaffold
后跟单个数字,.
需要添加两个零scaffold
后跟两位数,.
需要添加单个零s/(scaffold)([0-9]\.)/\10\2/
将为第一个案例添加一个零,然后成为第二个案例s/(scaffold)([0-9]{2}\.)/\10\2/
将添加另一个零