Awk 使用sed添加一个数字,同时保持所有其他变量不变
我一直在尝试在我的文件中的两位数之前添加一个数字,以使我所有的CHRM都有三个数字:Awk 使用sed添加一个数字,同时保持所有其他变量不变,awk,sed,Awk,Sed,我一直在尝试在我的文件中的两位数之前添加一个数字,以使我所有的CHRM都有三个数字: Original Data scaffold1.1|size30980855 scaffold10.1|size30980855 Output Data scaffold001.1|size30980855 scaffold010.1|size30980855 正如你所看到的,我试图让我的数值由一个三位数的代码组成。我正在考虑使用sed,但我不知道如何保持数字在另一边。。。这里有一个例子来说明我的意思 s
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'
我应该在第二个括号中放些什么来保留原来的数字
任何建议都将不胜感激。如果
perl
可以的话
$ perl -pe 's/scaffold\K\d+/sprintf "%03d", $&/e' ip.txt
scaffold001.1|size30980855
scaffold010.1|size30980855
匹配前面有scaffold\K\d+
scaffold
以便我们可以在替换部分使用Perl代码/e
将匹配的数字打印为3个字符宽的整数,并填充零sprintf“%03d”,$&
使用
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/
- 如果
perl
正常
$ perl -pe 's/scaffold\K\d+/sprintf "%03d", $&/e' ip.txt
scaffold001.1|size30980855
scaffold010.1|size30980855
匹配前面有scaffold\K\d+
scaffold
以便我们可以在替换部分使用Perl代码/e
将匹配的数字打印为3个字符宽的整数,并填充零sprintf“%03d”,$&
使用
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/
g
,如果scaffold深入到我的文件数据中,这将起作用,对吗?Perl非常棒,我的朋友。是的,它可以在任何地方工作。。。但只有第一次出现,如果有更多,请使用g