我使用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;
}
答案 0 :(得分:3)
试试这个: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
up-update 根据修改后的帖子,这里有一个工作示例,就像我之前提出过很多很多版本一样:
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