如何使用perl或awk对文件中的数字执行数算?

2021-02-16 13:37

我有一个文件A.txt:RS0255\u RS0083:115124129141143168170180rs0343\u RS0083:112113163175181rs0343\u RS0255:94101107164179183我想对后面的数字执行数算:

解答动态

  • 有很多工具可以用来对文本文件进行不同的操作。对于你提到的具体案例,我可能会使用perl:
    $perl-pe's/\b(\d+)\b/$1+10/ge'文件A.txtRS0255\u RS0083:125134139151153178180190rs0343\u RS0083:122123173185191rs0343\u RS0255:104111117174189193

    • gawk'$0+0=$0{$0+=10}{ORS=RT}1'RS='[:,\n]'文件

      • An awk答案:将每行分析为两个:-分隔字段。对第二个字段使用split()将其拆分为逗号上的字段,并在循环中修改拆分字段,从而创建新的输出记录。然后用逗号分隔符输出新记录,原始第一个字段作为前缀。
        awk-F:'BEGIN{OFS=quot;}{prefix=$1 nf=split($2,a,quot;)$0=lt;=nf;+++i)$i=a[i]+10 printfquot;,前缀,$0}'文件a.txt 输出将是
        rs0255\u RS0083:125134139151153178180190rs0343\u RS0083:122123173185191rs0343\u RS0255:104111117174189193 以上代码的更简洁的表示(对于那些认为一行更好的代码):
        awk-F:'{p=$1;n=split($2,a,quot;);$0=lt;n;++i)$i=a[i]+10;printfquot;,p,$0}'OFS=,文件a.txt Older回答,这并不像上面说的那么“好”一:
        使用awk并将每一行解释为由:或、分隔的字段列表,在每行的第二个字段上加10线路:
        awk-F“[:,]”开始{OFS=quot;}{for(i=2;iquot;,lt;=NF;+++i)$i+=10};1' 文件A.txt

        • sed's/,/:/'

          • awk-F,-v OFS=,'{split($1,tmp,quot;);$1=tmp[1]quot;tmp[2]+10;for(i=2;i<;=NF;i++)$i+=10;}1'infle

            • I提出这个建议awk:
              $awk-F':

              • ,''开始{OFS=quot;:quot;;for(i=2;iquot;,";}}}1'文件RS0255\u RS0083:125134139151153178180190rs0343\u RS0083:122123173185191rs0343\u RS0255:104111117174189193

                • 使用带逗号的渐进式切片的awk动态重新创建字段。
                  awk-F:-v of s=,'{f1=$1 FS;f2=$2 of s n=0;$0=";而(p=索引(f2,OFS)){$(++n)=10+子序列(f2,1,p-1)f2=子序列(f2,p+1)}$1=f1$1}1'文件A.TXT 输出:
                  RS0255\u RS0083:125134139151153178180190rs0343\u RS0083:122123173185191rs0343\u RS0255:104111117174189193 perl-pe'/:/g;s/\g(\d+)(\d)/($1+10)。$2/ge;'文件A.txt#或者,不要打印!$

                  • -- ? /(.*)(.*)(.*)/s;'文件A.txt

                    • End

                    免责声明:

                    本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。