目前我的文本文件看起来像这样..
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