Awk
日期說無效日期
我目前有一個製表符分隔的文本文件,格式如下:
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’
我究竟做錯了什麼?
日期不接受該輸入格式,請嘗試將年份放在首位,例如流式編輯輸入:
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
這是一個使用 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 }