2016-02-29 36 views
1

我的文件格式如下:使用awk来选择零左垫某些领域只有

1/2/2559,11:58:00,4/1/2559,09:36:04,10,55,My Name 

我只想与零只有第6列用awk(除其他事项外)左垫。

对于例如,输出可能是:

My Name,1/2/2559/11:58:00,10,0055,4/1/2559,09:35:04 

所以在我上面的例子中,两个第五和第六列数场,但我只是想离开垫的领域之一。

的printf的例子,我从其他岗位走到这一步,(说使用printf ($7,$1,$2,$5,"%04d\n",$6,$3,$4)似乎范围在各个领域或在到达为左补齐场终止当前行。

希望了解这方面的一些三分球, 。感谢

+0

你可能要研究如何printf的作品。这不是那么困难,它的(几乎)所有语言的语法都是一样的:awk,bash,C,... – mauro

回答

3

这不符合您发布的预期输出,但我不明白,你怎么能拿从你张贴所以这可能是你在找什么输入:

$ 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 
+0

我明白了,明白了。所以基本上,如果我要指定一个字段的格式,我需要指定所有的字段。这会让我的命令很长(我的实际脚本有大约50个字段),但是我猜如果需要完成它,需要完成。如果你知道一种方法只需要指定一个字段的格式,将不胜感激。 – feicipet

+0

是的,这是微不足道的,但这一切都取决于你的意思。你目前的问题有两个部分 - 1)格式化1场,2)重新安排多个领域。最好的解决方案将取决于您正在重新排列的字段的百分比。 –

+0

是的,我现在明白你的解释。我发现使用printf输出可能不是最好的解决方案。现在,通过为每行{a = sprintf(“%04d”,$ 6)}分配一个格式化的数字,然后将该变量打印在一个普通的print()语句中,我找到了一个更好的解决方案。结束。但在我这个拙劣的框架问题中,你的回答是正确的:) – feicipet