重新格式化日期以包含月份

重新格式化日期以包含月份

目前我的文本文件看起来像这样..

David   Webb    Box 34 Rural Route 2    Nixa    MO  65714   (417)555-1478   555-66-7788 09-13-1970
Martha  Kent    1122 North Hwy 5    Smallville  KS  66789   (785)555-2322   343-55-8845 04-17-1965
Edward  Nygma   443 W. Broadway Gotham City NJ  12458   (212)743-3537   785-48-5524 08-08-1987
O'Reilly    Baba    123 Torch Ln    Joplin  MO  64801   (417)222-1234   456-65-3211 12-13-1999
Martin Bob  44 Boss Rd  Joplin  MO  64801   (417)888-4565   456-98-1111 01-01-2007

日期位于第 9 个字段中,我想将它们显示为January 7, 2017而不是01-07-2017例如。

我该怎么做呢?如果使用选项,请简要解释它们的作用。在 bash 中执行此操作。需要将其放入脚本中并输出到新文件以保留原始文件。

答案1

可以通过以下方式轻松完成GNU awk通过其时间函数(MK时间时间) 但sed也可以这样做

sed '
    /^[0-9]/{                         #for last field with date
        y|-|/|
        s/^/date +"%B %d, %Y" -d /e   #reformat string by date
        b                             #go to end (print)    
    }
    s/\(.*\)\s/\1\n/                  #separate last field
    P                                 #print string without last field
    D                                 #operate just last field from start
    ' original.file | 
paste - - > new.file

答案2

我知道您要求 bash/shell 脚本,但如果可用的话,您也可以在 python 中执行此操作。

# date_converter.py
from datetime import datetime
from sys import stdin, stdout

spt = lambda x: datetime.strptime(x, "%m-%d-%Y")
sft = lambda x: datetime.strftime(x, "%B %d, %Y")
convert = lambda x: sft(spt(x))

for line in stdin.readlines():
    stdout.write(line[:-11] + convert(line[-11:-1]) + '\n')

用法:

python3.5 date_converter.py < old.txt > new.txt

相关内容