如何在现场添加日期和月份?

时间:2013-12-26 09:56:44

标签: unix if-statement awk

  1. 如果字段1 + 1天等于字段2,则使用if语句。
  2. 如果字段1 + 1个月等于字段2,则使用if语句。
  3. 我有这个输入

    09-11-2013    09-12-2013
    10-02-2013    10-02-2013
    26-10-2013    27-10-2013
    12-01-2013    12-02-2013
    22-02-2013    23-02-2013
    

    我使用了这段代码,但它仅适用于多年:

    awk '{if ($1+1==$2) print }'
    

1 个答案:

答案 0 :(得分:2)

mktime中查看awk funktin 有了它,您可以将日期转换为秒,以便于比较
这会打印$1$2

之间的天数
awk '{split($1, sd, "-");split($2, ed, "-");print $0,(mktime(ed[3] s ed[2] s ed[1] s 0 s 0 s 0)-mktime(sd[3] s sd[2] s sd[1] s 0 s 0 s 0))/86400}' s=' ' file
09-11-2013    09-12-2013 30
10-02-2013    10-02-2013 0
26-10-2013    27-10-2013 1
12-01-2013    12-02-2013 31
22-02-2013    23-02-2013 1

她打印了一天的1,如果是一个月打印2 计算二月可能有2829

awk '
    BEGIN {
        arr="31,28,31,30,31,30,31,31,30,31,30,31"
        split(arr, month, ",")
        x=0}
        {
        split($1, sd, "-")
        split($2, ed, "-")
        t=(mktime(ed[3] s ed[2] s ed[1] s 0 s 0 s 0)-mktime(sd[3] s sd[2] s sd[1] s 0 s 0 s 0))/86400
        month[2]=sd[3]%4==0?29:28
        }
    t==month[sd[2]+0] {x=2}
    t==1 {x=1}
        {print $0,x
        x=0}
    ' s=' ' file
09-11-2013    09-12-2013 2
10-02-2013    10-02-2013 0
26-10-2013    27-10-2013 1
12-01-2013    12-02-2013 2
22-02-2013    23-02-2013 1