我正在尝试计算具有开始和结束日期的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
结果吗?
答案 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