我的数据文件包含以下列
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填入日期?
答案 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)
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