reformater la date pour avoir un mois en mots

Actuellement, mon file text ressemble à ceci ..

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 

les dates sont dans le 9ème champ et je veux les afficher comme January 7, 2017 au lieu de 01-07-2017 par exemple.

Comment devrais-je faire ça? Si vous utilisez des options, veuillez expliquer brièvement ce qu'ils font. Faire cela en bash. Besoin de le mettre dans un script et de sortir dans un nouveau file pour préserver l'original.

Il peut être facilement fait via GNU awk par ses fonctions de time ( mktime et strftime ) mais sed peut le faire aussi

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

Je sais que vous avez demandé le script bash / shell, mais vous pouvez aussi le faire en python s'il est disponible.

 # 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') 

Usage:

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