如何将用月份名称表示的日期转换为数字月份名称?

Kir*_*ire 4 text-processing date macos

date我使用 MacOS,并且格式有变量

3.Jan.2023,
12.Nov.2017,
9.Apr.2022,
...
Run Code Online (Sandbox Code Playgroud)

我需要改变

03.01.2023,
12.11.2017,
09.04.2022,
...
Run Code Online (Sandbox Code Playgroud)

Dig*_*uma 10

MacOSdate允许您指定转换的输入和输出格式:

for inp in "3.Jan.2023" "12.Nov.2017" "9.Apr.2022"; do
    date -j -f "%d.%b.%Y" "$inp" "+%d.%m.%Y"
done
Run Code Online (Sandbox Code Playgroud)

根据strptime()

  • %b月份,使用区域设置的月份名称;可以指定缩写或全名。
  • %d该月的第几天[01,31];允许使用前导零,但不是必需的。
  • %m月份号[01,12];允许使用前导零,但不是必需的。
  • %Y年份,包括世纪(例如,1988)。

输出:

03.01.2023
12.11.2017
09.04.2022
Run Code Online (Sandbox Code Playgroud)


Ed *_*ton 6

使用任何 awk:

$ awk '
    BEGIN { FS=OFS="," }
    {
        split($1,d,".")
        $1 = sprintf("%02d.%02d.%04d", d[1], index("  JanFebMarAprMayJunJulAugSepOctNovDec",d[2])/3, d[3])
        print
    }
' file
03.01.2023,
12.11.2017,
09.04.2022,
Run Code Online (Sandbox Code Playgroud)

前面有2个空格Jan