- ベストアンサー
AWKにて時刻差分を取得したい
お世話になります。 現状、以下のログがあるのですが、 <snip> 日時, 通信開始時刻, 通信終了時刻・・・ 2008/4/8, 14:00:00.3, 14:10:00.5, ・・・ <snip> で、AWK(awk -F , )にて時刻差分を取得したいと考えたのですが、 $3-$2の出力結果が"0""-1"になり、表示されません。 うまく時刻差分を取得する方法はないでしょうか。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
基準時点からの経過秒数を返すのや日時の書式を整形するのはあるけど、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 で経過秒が得られます。
その他の回答 (1)
- dezimac
- ベストアンサー率56% (2365/4208)
変数に時刻差分の合計を入れて、ENDで最後にそれを出力するようにすればいいです。 { #ファイル読み込んで、差分を求める処理 jikan = $3-$2; total += jikan; #差分の合計 } END{ #最後に実行される処理 print "合計 " total " 秒"; } ↓でも一通り読めば、大雑把な使い方は理解出来ます。 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/awk/intro/
お礼
参考にさせていただきます。AWKは独特ですねぇ。 勉強になります。
お礼
ありがとうございました。大変助かりました。 すこし、タイトルとそれるのですが、 $ gawk -F, -f exam.awk data.txt 92 101.7 60 55.2 計算後の、出力された結果をまとめて合計することってできますでしょうか。