如何在数据文件中填写0&#s; s?

时间:2014-12-17 02:02:27

标签: linux awk padding

我的数据文件包含以下列

Current Date     FirstName    LastName
 8/31/2014         AAA          BBB
 8/31/2014         CCC          DDD 

我想要做的是在CurrentDate列中提取日期,将其转换并将其放入仅包含年份和月份的新列。

像这样:

CurrentMonth  CurrentDate     FirstName    LastName
 201408       8/31/2014         AAA          BBB
 201408       8/31/2014         CCC          DDD 

我尝试使用awk命令

awk -F $'\t' 'BEGIN {OFS=FS} { { split($1, val,"/") } print val[3] val[1],$0}' > outputFile

然而,上面的命令给了我20148而不是201408.

CurrentMonth  CurrentDate     FirstName    LastName
 20148       8/31/2014         AAA          BBB
 20148       8/31/2014         CCC          DDD 

如何将0填入日期?

2 个答案:

答案 0 :(得分:1)

只需使用printf

awk -F $'\t' 'BEGIN {OFS=FS} { { split($1, val,"/") } printf "%04d%02d\t%s\n", val[3], val[1],$0}'
awk中的

printf与C中的printf大致相同;您可以在任何C参考站点上找到格式语言的规范(例如here)。简而言之,在%04d之类的格式规范中,%引入了格式运算符,0表示填充零,4表示要打印的宽度,d }表示"打印为十进制数"。

这个awk脚本产生

201408  8/31/2014   AAA BBB
201408  8/31/2014   CCC DDD 

答案 1 :(得分:0)

在awk中使用printf函数

,请使用%02s

这是代码

awk 'BEGIN{print "CurrentMonth  CurrentDate     FirstName    LastName"} 
     NR>1{split($1,a,"/"); printf "%s%02s\t\t%s\n",a[3],a[1],$0}' infile

CurrentMonth  CurrentDate     FirstName    LastName
201408       8/31/2014         AAA          BBB
201408       8/31/2014         CCC          DDD