Awk 使用sed添加一个数字,同时保持所有其他变量不变

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

我一直在尝试在我的文件中的两位数之前添加一个数字,以使我所有的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'
我应该在第二个括号中放些什么来保留原来的数字


任何建议都将不胜感激。

如果
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/
    将添加另一个零

    • 如果
      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/
        将添加另一个零

      如果scaffold深入到我的文件数据中,这将起作用,对吗?Perl非常棒,我的朋友。是的,它可以在任何地方工作。。。但只有第一次出现,如果还有更多,请使用
      g
      ,如果scaffold深入到我的文件数据中,这将起作用,对吗?Perl非常棒,我的朋友。是的,它可以在任何地方工作。。。但只有第一次出现,如果有更多,请使用
      g