BASH / AWK如何在给定的文本文件中替换所有日期dd.mm.yyyy日期到dd月yy

时间:2013-04-15 17:04:35

标签: bash awk

如主题如何在给定的文本文件中使用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

1 个答案:

答案 0 :(得分: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