월을 포함하도록 날짜 형식을 다시 지정합니다.

월을 포함하도록 날짜 형식을 다시 지정합니다.

현재 내 텍스트 파일은 다음과 같습니다.

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

관련 정보