使用bash脚本将日期格式MM / DD / YYYY转换为DD-Mmm-YYYY

时间:2017-06-29 12:23:16

标签: bash shell unix awk

4 列中有一个显示日期(MM/DD/YYYY)的文字文件。我想将column4的日期格式更改为DD-Mmm-YYYY。 当我使用日期-d 08/31/2017 "+%d-%b-%Y"命令时,它可以完美地工作并将日期格式转换为31-Aug-2017。但是当我在bash脚本中使用awk执行相同的命令时,它对我不起作用。

awk 'BEGIN { FS = ","; OFS = FS;} {if(NR>1){$4=date -d $4 "+%d-%b-%Y";print} else{print}}' file >> tmpfile

2 个答案:

答案 0 :(得分:1)

你需要使用|重定向date命令并返回输出,所以如果第4列是你在文件“filename”中关注的那一列:

awk '{ print |"date -d "$4" \"+%d-%b-%Y\"" }' filename

完整的解决方案是:

awk -F, '{ for (i=1;i<=3;i++) { var=var$i"," } for (i=5;i<=NF-1;i++) { var1=var1$i"," } print |"echo "var"$(date -d "$4" \"+%d-%b-%Y\"),"var1$NF }' filename

我们知道我们正在关注第4列,因此我们使用第1列到第3列构建变量(var),然后构建一个date命令,最后构建一个var 1变量。所有这些都用于构建一个有向的echo命令。

答案 1 :(得分:0)

awk 解决方案:

测试输入文件:

> cat input
aa,ss,dd,08/31/2017,sdf
awk 'BEGIN{ FS=OFS="," }NR>1{ split($4,a,"/"); 
     $4=strftime("%d-%b-%Y", mktime(sprintf("%d %d %d 0 0 0",a[3],a[1],a[2]))) }1' input

输出:

aa,ss,dd,31-Aug-2017,sdf

关于 AWK时间功能
https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html