删除awk文件中的前导零

杰夫·贝格劳

我正在使用awk文件生成报告以提取数据并写入另一个文件。档案名称:dosreport.awk。此代码打印这样的物料号000000000000787301

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

相关数据是,E2EDP19001 02002000000000000797578我需要去除前导零以仅给我787301。同样,这在awk文件中,因此无法将管道传递给awk命令。

对原始的printf进行类型转换会给我期望的值。工作代码

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;
                }
用户918938

试试这个:sub(/^0+/, "", $2)

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

或通过添加零进行类型转换:

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

更新基于注释的工作示例:

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

或者,保留$2

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

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

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

类型转换

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章