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