使用awk或sed在文件的第一列中添加增量日期

时间:2017-02-26 14:51:38

标签: linux shell awk sed

我想在文件的第一列添加日期,该日期从" 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 

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

或者使用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