awk中日期转换的奇怪行为

时间:2012-07-16 12:33:03

标签: awk

我正在尝试计算具有开始和结束日期的awk的持续时间。这是我的功能

function computeDuration(start, end) {
    sub(/T/, " ", start);
    sub(/T/, " ", end);
    print start;
    print end;
    cmd="date --date=\"$start\" +%s";
    cmd | getline startDate;
    cmd="date --date=\"$end\" +%s";
    cmd | getline endDate;
    print startDate;
    print endDate;
    return endDate-startDate;
}

我的输出是:

2012-7-16 13:20
2012-7-16 13:30
1342389600
1342389600

有人可以解释两个不同的日期可能会导致相同的+%s结果吗?

1 个答案:

答案 0 :(得分:2)

这是cmd变量失败。

awk 'function computeDuration(start, end) {
print start;
print end;
cmd="date --date=\"start\" +%s";print cmd;
cmd | getline startDate;
cmd="date --date=\"end\" +%s";print cmd;
cmd | getline endDate;
print startDate;
print endDate;
return endDate-startDate;
} BEGIN {computeDuration("2012-7-16 13:20","2012-7-16 13:30")}'

OUTPUT:
2012-7-16 13:20
2012-7-16 13:30
date --date="$start" +%s
date --date="$end" +%s
1342389600
1342389600

$符号不应该在那里,你需要在变量周围加上额外的引号

awk 'function computeDuration(start, end) {
print start;
print end;
cmd="date --date=\""start"\" +%s";print cmd;
cmd | getline startDate;
cmd="date --date=\""end"\" +%s";print cmd;
cmd | getline endDate;
print startDate;
print endDate;
return endDate-startDate;
} BEGIN {print computeDuration("2012-7-16 13:20","2012-7-16 13:30")}'

OUTPUT:
2012-7-16 13:20
2012-7-16 13:30
date --date="2012-7-16 13:20" +%s
date --date="2012-7-16 13:30" +%s
1342437600
1342438200