현재 다음 형식의 탭으로 구분된 텍스트 파일이 있습니다.
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
대신 날짜 형식을 지정하려고합니다 September 13, 1970
.09-13-1970
내가하려고했던 것은 cut -f 9 file > tmpfile
다음을 사용하는 것입니다.
date -f tmpfile "+%B %d, %Y" > date
하지만 계속 말하잖아
date: invalid date ‘09-13-1970’
date: invalid date ‘04-17-1965’
date: invalid date ‘08-08-1987’
내가 뭘 잘못했나요?
답변1
해당 입력 형식에서는 날짜가 허용되지 않습니다. 스트림 편집 입력처럼 연도를 앞에 입력해 보세요.
cut -f 9 file | sed 's/\(..\)-\(..\)-\(....\)/\3-\1-\2/' > tmpfile
수동 테스트:
$ date --date '09-13-1970' "+%B %d, %Y"
date: invalid date ‘09-13-1970’
$ date --date '09/13/1970' "+%B %d, %Y"
September 13, 1970
$ date --date '1970/09/13' "+%B %d, %Y"
September 13, 1970
$ date --date '1970-09-13' "+%B %d, %Y"
September 13, 1970
답변2
이것은 awk를 사용하고 중간 파일이 필요하지 않은 버전입니다.
#!/bin/awk -f
BEGIN {FS="\t"; OFS="\t"}
{
split($9,A,"-");
S1 = sprintf("%d %d %d 0 0 0",A[3],A[1],A[2])
D1 = strftime("%B %d, %Y", mktime(S1))
$9 = D1
print
}