删除awk的文件中的前导零 [英] Removing Leading Zeros within awk file
问题描述
我生成使用一个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屋!