删除awk的文件中的前导零 [英] Removing Leading Zeros within awk file

查看:146
本文介绍了删除awk的文件中的前导零的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我生成使用一个awk文件提取数据并写入到另一个文件的报告。
文件名:
         dosreport.awk。
这code打印材料号这样000000000000787301

 如果(SUBSTR($ 0,1,7)==E2EDP19&放大器;&安培; E2EDP19seen == 1)
                {
                    printf上SUBSTR($ 2,6);
                    E2EDP19seen = E2EDP19seen +1;
                }

的相关数据是
E2EDP19001 02002000000000000797578
我需要剥离,只是给我787301前导零。
再次,这是一个awk文件中,所以管道到awk命令将无法工作。

铸字原来的printf会给我的预期值。工作code

 如果(SUBSTR($ 0,1,7)==E2EDP19&放大器;&安培; E2EDP19seen == 1)
                {
                    如果(SUBSTR($ 2,6)+ 0 == 0)
                    {
                        printf上SUBSTR($ 2,6);
                    }
                    其他{
                        printf上SUBSTR($ 2,6)+ 0;
                    }
                    E2EDP19seen = E2EDP19seen +1;
                }


解决方案

试试这个:<?code>子(/ ^ 0 + /,,$ 2)

  $的awk'BEGIN {B =000000000000787301;子(/ ^ 0 + /,,二);印片B;}'
787301

或通过添加零强制转换它

  $的awk'BEGIN {B =000000000000787301;打印B + 0;}
787301

更新基于注释的例子:

  $回声'E2EDP19001 02002000000000000797578'| AWK'{$ 2 = SUBSTR($ 2,6);子(/ ^ 0 + /,,$ 2);打印$ 2;}
797578

或preserve $ 2

  $回声'E2EDP19001 02002000000000000797578'| AWK'{a = SUBSTR($ 2,6);子(/ ^ 0 + /,一个);打印;}'
797578

了更新根据调整后,这里的工作示例,就像我提出了很多,多次修改前:

子()

  $回声'E2EDP19001 02002000000000000797578'\\
   | awk的'BEGIN {E2EDP19seen = 1}
       {如果(SUBSTR($ 0,1,7)==E2EDP19与&amp;&放大器; E2EDP19seen == 1){
       OUT = SUBSTR($ 2,6);子(/ ^ 0 + /,出);打印 } }'
797578

的类型转换

  $回声'E2EDP19001 02002000000000000797578'\\
  | awk的'BEGIN {E2EDP19seen = 1}
      {如果(SUBSTR($ 0,1,7)==E2EDP19与&amp;&放大器; E2EDP19seen == 1){
      打印SUBSTR($ 2,6)+ 0}}
797578

I am generating a report using an awk file to pull data and write to another file. Filename: dosreport.awk. This code prints a material number like this 000000000000787301

if (substr($0, 1, 7) == "E2EDP19" && E2EDP19seen == 1)
                {
                    printf " " substr($2, 6);
                    E2EDP19seen=E2EDP19seen +1;
                }

The relevant data is E2EDP19001 02002000000000000797578 I need the leading zeros stripped to just give me 787301. Again, this is within an awk file, so piping to an awk command will not work.

Typecasting the original printf will give me the expected value. Working code

if (substr($0, 1, 7) == "E2EDP19" && E2EDP19seen == 1)
                {
                    if (substr($2, 6)+0 == 0)
                    {
                        printf " " substr($2, 6);
                    }
                    else{
                        printf " " substr($2, 6)+0;
                    }
                    E2EDP19seen=E2EDP19seen +1;
                }

解决方案

Try this: sub(/^0+/, "", $2)?

$ awk 'BEGIN{b="000000000000787301"; sub(/^0+/, "", b); print b;}'
787301

or typecast it by adding zero:

$ awk 'BEGIN{b="000000000000787301"; print b+0;}'
787301

update A working example based on comments:

$ echo 'E2EDP19001 02002000000000000797578' | awk '{$2 = substr($2,6); sub(/^0+/, "", $2); print $2;}'
797578

or, preserve $2:

$ echo 'E2EDP19001 02002000000000000797578' | awk '{a = substr($2,6); sub(/^0+/, "", a); print a;}'
797578

up-update Based on revised post, here's a working sample, just like I proposed many, many revisions ago:

sub()

$ echo 'E2EDP19001                                                   02002000000000000797578' \
   | awk 'BEGIN {E2EDP19seen = 1 } 
       {if (substr($0, 1, 7) == "E2EDP19" && E2EDP19seen == 1) {
       out = substr($2, 6); sub(/^0+/, "", out); print out } }'
797578

typecast

$ echo 'E2EDP19001                                                   02002000000000000797578' \
  | awk 'BEGIN {E2EDP19seen = 1 } 
      {if (substr($0, 1, 7) == "E2EDP19" && E2EDP19seen == 1) {
      print substr($2, 6) + 0 } }'
797578

这篇关于删除awk的文件中的前导零的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆