0

如主题如何在给定的文本文件中使用 bash/awk 仅将文件中的日期以日期 dd.mm.yyyy 格式替换为日期格式 dd 月 yyyy 月份(如 02 至 2 月等)

输入文件:

kandal w Rosji. "Polacy są niezbyt kreatywni 12.12.2032
43.12.4521 Dramatyczne wyznanie córki gen. Jaruzelskiego
Politycy chcą,
23/32/3211 by Tusk przeprosił Benedykta XVI
Nie żyje wybitny historyk prof. Andrzej Garlicki
Polityk PiS: Śląsk należy przywrócić Polsce
4

1 回答 1

2

您可以像这样使用 gnu awk 的 (gawk) 时间功能:

echo "18.11.2012" | awk -F"." '{t=mktime($3 " " $2 " " $1 " 00 00 00");
     print strftime("%d %B %Y", t)}'

现场演示:http: //ideone.com/Jmz77N

根据需要使用 FS 而不是 -F :

awk 'BEGIN {FS="."} {t=mktime($3 " " $2 " " $1 " 00 00 00"); 
     print strftime("%d %B %Y", t)}'

更新:(使用您的输入文件的脚本)

awk '{
  for(i=1; i<=NF; i++) {
     if ($i ~ /[0-9][0-9]\.[0-9][0-9]\.[1-9][0-9][0-9][0-9]/) {
        split($i, a, ".");
        t=mktime(a[3] " " a[2] " " a[1] " 00 00 00");
        if (t == -1)
           printf("%s", $i);
        else
           printf("%s", strftime("%d %B %Y", t));
     }
     else
        printf("%s", $i);
    if (i<NF)
       printf(" ");        
   } 
   printf("\n");
}' inputFile

新演示:http: //ideone.com/PoMsU3

于 2013-04-15T17:17:56.047 回答