0

開始日と終了日を持つ 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

2 つの異なる日付が同じ結果になる可能性がある理由を説明できる人はいます+%sか?

4

1 に答える 1

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
于 2012-07-16T14:13:56.603 に答える