使用awk仅选择性地将某些字段的左填充置零

使用awk仅选择性地将某些字段的左填充置零,awk,Awk,我的文件的格式如下: 1/2/2559,11:58:00,4/1/2559,09:36:04,10,55,My Name 我只想使用awk来(除其他外)左pad,第6列为零 例如,输出可以是: My Name,1/2/2559/11:58:00,10,0055,4/1/2559,09:35:04 在我上面的例子中,第5列和第6列都是数字字段,但我只想左键填充其中一个字段 到目前为止,我从其他帖子中得到的printf示例(比如使用printf($7,$1,$2,$5,“%04d\n”、$6,$

我的文件的格式如下:

1/2/2559,11:58:00,4/1/2559,09:36:04,10,55,My Name
我只想使用awk来(除其他外)左pad,第6列为零

例如,输出可以是:

My Name,1/2/2559/11:58:00,10,0055,4/1/2559,09:35:04
在我上面的例子中,第5列和第6列都是数字字段,但我只想左键填充其中一个字段

到目前为止,我从其他帖子中得到的printf示例(比如使用
printf($7,$1,$2,$5,“%04d\n”、$6,$3,$4)
似乎适用于所有字段,或者在到达要左填充的字段时终止当前行


如果您能提供一些建议,我将不胜感激。

这与您发布的预期输出不匹配,但我不知道如何从您发布的输入中获得这些,因此这可能是您正在寻找的:

$ awk -F, '{printf "%s,%s,%s,%s,%04d,%s,%s\n",$7,$1,$2,$5,$6,$3,$4}' file
My Name,1/2/2559,11:58:00,10,0055,4/1/2559,09:36:04
如果没有,则编辑您的问题以解释示例输入和预期输出之间的映射

还考虑:

$ awk 'BEGIN{FS=OFS=","} {$6=sprintf("%04d",$6)} 1' file
1/2/2559,11:58:00,4/1/2559,09:36:04,10,0055,My Name

你可能想研究printf是如何工作的。这不是很难,而且它在所有语言中的语法(几乎)都是一样的:awk、bash、C……我明白了,明白了。所以基本上,如果我要为一个字段指定格式,我需要为所有字段指定格式。这会使我的命令非常长(我的实际脚本大约有50个字段)但我想,如果需要这样做的话,就必须这样做。如果你知道一种只需为一个字段指定格式的方法,我将不胜感激。是的,这很简单,但这完全取决于你的意思。你当前的问题有两个部分:1)格式化一个字段,2)重新排列多个字段。最佳解决方案将取决于您重新排列的字段的百分比。是的,我现在理解您的解释。我发现在输出中使用printf可能不是最好的解决方案。现在,我为自己找到了一个更好的解决方案,为每一行{a=sprintf(“%04d”,$6)}分配一个格式化的数字给一个变量,然后在末尾的general print()语句中打印该变量。但就我的问题而言,你的回答是正确的:)