현재 내 텍스트 파일은 다음과 같습니다.
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
January 7, 2017
날짜는 9번째 필드에 있는데 예 를 들어 대신 에 날짜를 표시하고 싶습니다 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