在 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
答案 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