【问题标题】:add incremental date in first column of the file using awk or sed使用 awk 或 sed 在文件的第一列中添加增量日期
【发布时间】:2017-02-26 14:51:37
【问题描述】:

我想在从“1950/01/01”(格式:%m/%d/%Y)开始的文件的第一列中添加日期,并且日期应该使用 awk 或 sed 随每一行递增。 添加日期时,还需要考虑闰年..

文件内容为:

1,2,3,4
3,4,5,6
4,7,8,9

预期输出:

1950/01/01,1,2,3,4
1950/02/01,3,4,5,6
1950/03/01,4,7,8,9

到目前为止,我已设法在第一列中添加格式化日期,但无法随每一行递增。

awk -v date="$(date -d '1950/01/01' '+%m/%d/%Y')" -F"," 'BEGIN { OFS = "," }  ; {print date, $0}' inout.csv 

【问题讨论】:

    标签: linux shell awk sed


    【解决方案1】:

    使用Gawk

    输入

    $ cat file
    1,2,3,4
    3,4,5,6
    4,7,8,9
    

    输出

    $ awk -v date="$( date -d '1950/01/01' '+%s' )" '{print strftime("%Y/%d/%m",date)","$0; date+=86400}' file
    1950/01/01,1,2,3,4
    1950/02/01,3,4,5,6
    1950/03/01,4,7,8,9
    

    说明

     awk -v date="$( date -d '1950/01/01' '+%s' )" '{ # call awk set var date with timestamp
    
            print strftime("%Y/%d/%m",date) "," $0;   # print date, sep comma and current line 
            date+=86400                               # one day = 86400 seconds, just increment
     }
     ' file
    

    【讨论】:

      【解决方案2】:

      或者使用 bash 和 GNU 日期:

      a=1950/01/01
      while IFS= read -r line; do echo "$a,$line"; a=$(date +%Y/%m/%d -d "$a 1 day"); done < file
      

      输出:

      1950/01/01,1,2,3,4 1950/01/02,3,4,5,6 1950/01/03,4,7,8,9

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多