Awk

日期說無效日期

  • February 14, 2017

我目前有一個製表符分隔的文本文件,格式如下:

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
}

引用自:https://unix.stackexchange.com/questions/344798