Tukubaiオンラインコマンドマニュアル - calclock(1)
calclock(1)
【名前】
calclock
: 日付と時刻を秒数に変換
【書式】
Usage : calclock [-r] [<f1> <f2> <f3> ...] <file> Version : Sat Aug 20 22:29:15 JST 2022 Edition : 1
【説明】
標準入力または入力ファイル<file>
の指定フィールド<f1> <f2> <f3>
...の年月日や時間を1970年1月1日0時0分0秒からの秒数に変換して出力する。オプション-r
を指定すると逆の変換を実施する。年月日データや時刻データを10進数に置き換えて計算するなどの用途に使用する。<file>
として-
を指定すると標準入力を使用する。
日付や時刻は次のフォーマットである必要がある。
yyyymmdd 年月日(8桁) HHMMSS 時分秒(6桁) yyyymmddHHMMSS 年月日時分秒(14桁)
変換後の値を分に直す場合は60、時は3600、日は86400で除算する。
【注意】
入力ファイル<file>
は省略できない フィールド指定<f1> <f2> <f3>
... を省略すると全フィールド指定となる。 フィールド指定<f1> <f2> <f3>
... に0があると全フィールド指定となる。 このとき同時に0以外のフィールド指定があってもそれらは無視される。
【例1】
$ cat data 0001 0000007 20060201 20060206 117 8335 -145 0001 0000007 20060203 20060206 221 15470 0 0001 0000007 20060205 20060206 85 5950 0 0001 0000007 20060206 20060206 293 20527 -17 0001 0000007 20060207 20060206 445 31150 0 0002 0000007 20060208 20060206 150 11768 -1268 0002 0000007 20060209 20060206 588 41160 0 0002 0000007 20060210 20060206 444 31080 0 $
4フィールド目と3フィールド目を変換し、その間の差分の日数を求めるには次のようにコマンドを実行する。
$ calclock 3 4 - < data | tee data2 | awk '{print ($6-$4)/86400}' > data3 $ cat data2 0001 0000007 20060201 1138752000 20060206 1139184000 117 8335 -145 0001 0000007 20060203 1138924800 20060206 1139184000 221 15470 0 0001 0000007 20060205 1139097600 20060206 1139184000 85 5950 0 0001 0000007 20060206 1139184000 20060206 1139184000 293 20527 -17 0001 0000007 20060207 1139270400 20060206 1139184000 445 31150 0 0002 0000007 20060208 1139356800 20060206 1139184000 150 11768 -1268 0002 0000007 20060209 1139443200 20060206 1139184000 588 41160 0 0002 0000007 20060210 1139529600 20060206 1139184000 444 31080 0 $ cat data3 5 3 1 0 -1 -2 -3 -4 $
【例2】
-r
オプションを使用すると、指定したフィールドの値(1970年1月1日0時0分0秒からの秒数)を通常の年月日時分秒の14桁の表記に変換する。年月日のみのフォーマットにする場合は、出力後awk(1)のsubstr(-,-)やself(1)で上8桁を切り出す。
$ cat data 0001 0000007 20060201 117 8335 -145 0001 0000007 20060203 221 15470 0 0001 0000007 20060205 85 5950 0 0001 0000007 20060206 293 20527 -17 0001 0000007 20060207 445 31150 0 0002 0000007 20060208 150 11768 -1268 0002 0000007 20060209 588 41160 0 0002 0000007 20060210 444 31080 0 $
3フィールド目の各日の3日後の日付を求めるには、次のようにコマンドを実行する。
$ calclock 3 data | awk '{print $4+86400*3}' | tee data2 | calclock -r 1 - | tee data3 | self 2.1.8 > data4 $ cat data2 1138978800 1139151600 1139324400 1139410800 1139497200 1139583600 1139670000 1139756400 $ cat data3 1138978800 20060204000000 1139151600 20060206000000 1139324400 20060208000000 1139410800 20060209000000 1139497200 20060210000000 1139583600 20060211000000 1139670000 20060212000000 1139756400 20060213000000 $ cat data4 20060204 20060206 20060208 20060209 20060210 20060211 20060212 20060213 $