格式'2017年9月'格式转换为dd.mm.yyyy格式在shell中
我有一个要求将格式“2017年9月1日”格式转换为shell脚本中的01.09.2017。 ,这也适用于任何带有后缀“st,nd,rd,th”的日期。我试过使用sed命令,但没有运气。 请任何人都可以帮忙!!!!格式'2017年9月'格式转换为dd.mm.yyyy格式在shell中
很多预先感谢。
$ cat file
1st September 2017
$ awk '{printf "%02d.%02d.%04d\n", $1+0, (index("JanFebMarAprMayJunJulAugSepOctNovDec",substr($2,1,3))+2)/3, $3}' file
01.09.2017
鉴于后约竖线分隔的输入(下一次包括简洁的,可测试样品的输入和输出预计在你的问题,所以我们不是在你的要求,猜测)您的评论在别处:
$ cat file
foo|1st September 2017|bar
$ cat tst.awk
BEGIN { FS=OFS="|" }
{
split($2,d," ")
mth = (index("JanFebMarAprMayJunJulAugSepOctNovDec",substr(d[2],1,3))+2)/3
$2 = sprintf("%02d.%02d.%04d", d[1]+0, mth, d[3])
print
}
$ awk -f tst.awk file
foo|01.09.2017|bar
现在适用。非常感谢 – Dev
sed的 + 日期解决方案:
d="1st September 2017"
date -d"$(sed -E 's/^([0-9]+)(st|nd|rd|th)/\1/' <<<$d)" +"%d/%m/%Y"
01/09/2017
为了使其可重复使用,你可以创建一个功能象下面这样:
convert_date() { date -d"$(sed -E 's/^([0-9]+)(st|nd|rd|th)/\1/' <<<$1)" +"%d/%m/%Y"; }
用法:
convert_date "1st September 2017"
01/09/2017
convert_date "25th October 2017"
25/10/2017
谢谢。但是我怎样才能使它在任何日期st/nd/rd/th通用? – Dev
@Nam,看我的更新 – RomanPerekhrest
谢谢罗马。它在我将参数传递为“2017年9月1日”时起作用,但如果值处于管道分隔文件中,则它不会替换日期。请帮忙! – Dev
欢迎来到SO,请展示您的编码工作。 – Cyrus