ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3945521 AWKにて時刻差分を取得したい
質問者:hokuhoku7 お世話になります。
現状、以下のログがあるのですが、

<snip>
日時, 通信開始時刻, 通信終了時刻・・・
2008/4/8, 14:00:00.3, 14:10:00.5, ・・・
<snip>

で、AWK(awk -F , )にて時刻差分を取得したいと考えたのですが、
$3-$2の出力結果が"0""-1"になり、表示されません。

うまく時刻差分を取得する方法はないでしょうか。
よろしくお願いいたします。
困り度:
  • 困っています
質問投稿日時:
08/04/13 15:00
この質問に対する回答は締め切られました。

回答

ANo.2 変数に時刻差分の合計を入れて、ENDで最後にそれを出力するようにすればいいです。

{
#ファイル読み込んで、差分を求める処理
jikan = $3-$2;
total += jikan; #差分の合計
}

END{
#最後に実行される処理
print "合計 " total " 秒";
}


↓でも一通り読めば、大雑把な使い方は理解出来ます。
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/awk/intro/
回答者:dezimac
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/04/14 16:26
参考URL: http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/awk/intro/
この回答へのお礼参考にさせていただきます。AWKは独特ですねぇ。
勉強になります。

回答良回答20pt

ANo.1 基準時点からの経過秒数を返すのや日時の書式を整形するのはあるけど、A-Bのように直接日時を計算するような関数はなかったと思います。

他の言語でもそうですが、時間(文字列)を秒数に変換してから、計算するようにして下さい。

時間表記が「hh:mm:ss」の場合

num = split($2,time,":")
$2 = time[1] * 60 * 60 + time[2] * 60 + time[3]
num = split($3,time,":")
$3 = time[1] * 60 * 60 + time[2] * 60 + time[3]

$3 - $2

で経過秒が得られます。
回答者:dezimac
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/04/13 15:36
参考URL: http://www.linux.or.jp/JM/html/GNU_gawk/man1/gawk.1.html
この回答へのお礼ありがとうございました。大変助かりました。
すこし、タイトルとそれるのですが、

$ gawk -F, -f exam.awk data.txt
92
101.7
60
55.2

計算後の、出力された結果をまとめて合計することってできますでしょうか。