2
 cat A 
        ROW1COL1 ROW1COL2 2013-08-26 22:07:26  2013-08-26 22:07:26
        ROW2COL1 ROW2COL2 2013-08-26 22:08:16  2013-08-26 22:08:20
        (2 rows)

目标是捕获时间戳之间差异大于 3 秒的行。

        output here is 
        ROW2COL1 ROW2COL2 2013-08-26 22:08:16  2013-08-26 22:08:20

        I tried the below.

        bash-3.2$ echo $d1
        08/28/2013 16:56:36
        bash-3.2$ echo $d2
        08/28/2013 16:56:44
        bash-3.2$ date1=$(date -d "$d1" +%s)
        bash-3.2$ date2=$(date -d "$d2" +%s)
        bash-3.2$ diff=$(expr $date2 - $date1)
        bash-3.2$ echo $diff
        8
          i am getting syntax error with the "%s" while using awk command.
        Here are 2 variations i tried.but 

        awk '{t1=$3" "$4;t2=$5" "$6;time2=$(date -d "$t2" +%s);time1=$(date -d "$t1" +%s); if ($(expr $time2 - $time1) > 3) print $0 }' A
4

1 回答 1

1

awk 有一个内置的 mktime() 方法,date -d ... +%s除了日期输入的格式必须是“YYYY MM DD hh mm ss”之外,它等效于。

awk '
    {
            t1=$3" "$4;
            t2=$5" "$6;

            gsub(/[-:]/, " ", t1);
            gsub(/[-:]/, " ", t2);

            time1 = mktime(t1);
            time2 = mktime(t2);

            if ( ( time2 - time1 ) > 3 )
                    print $0
    }' A

顺便说一句,你所拥有的 awk 脚本在 awk 脚本中混合了 shell 语法。这就是错误的原因。

对于没有 mktime 的 awk

awk '
    {
            t1=$3" "$4;
            t2=$5" "$6;

            cmd1 = "date -d \"" t1 "\" +%s";
            cmd2 = "date -d \"" t2 "\" +%s";

            cmd1 | getline time1;
            cmd2 | getline time2;

            if ( ( time2 - time1 ) > 3 )
                    print $0
    }' A
于 2013-08-29T03:41:36.427 回答