calclock
名前
calclock : 暦、時間の計算(カレンダークロック)
書式
使い方とオプション
Usage
calclock <f1> <f2> <f3>... filename
Option
-r --dst
説明
引数や標準入力から読み込んだファイルの指定したフィールドの年月日や時間を全て 1970年1月1日0時0分0秒からの秒数(UNIX Time)に置き換えたり、戻したりするツールです。年月日や時刻同士の計算をする場合に、一旦10進数に置き換えて計算するのに使用します。
日時のフォーマットは YYYYMMDD(年月日)の8桁、 YYYYMMDDhhmm(年月日時分)の 12桁、YYYYMMDDhhmmss(年月日時分秒)の 14桁の3種類のいずれかです。
変換後の値を分に直す場合は 60、時は 3600、日は 86400 で除算します。
-r オプションを指定すると、逆変換(UNIX Time から YYYYMMDDhhmm へ変換)を行います。
例(その1)
(元データ)
$ cat data 0001 0000007 20160201 20160206 117 8335 -145 0001 0000007 20160203 20160206 221 15470 0 0001 0000007 20160205 20160206 85 5950 0 0001 0000007 20160206 20160206 293 20527 -17 0001 0000007 20160207 20160206 445 31150 0 0002 0000007 20160208 20160206 150 11768 -1268 0002 0000007 20160209 20160206 588 41160 0 0002 0000007 20160210 20160206 444 31080 0
4フィールド目と3フィールド目を変換し、その間の差分の日数を求めます。
$ calclock 3 4 < data | tee data2 | lcalc '($6 - $4) / 86400' > data3 $ cat data2 0001 0000007 20160201 1454252400 20160206 1454684400 117 8335 -145 0001 0000007 20160203 1454425200 20160206 1454684400 221 15470 0 0001 0000007 20160205 1454598000 20160206 1454684400 85 5950 0 0001 0000007 20160206 1454684400 20160206 1454684400 293 20527 -17 0001 0000007 20160207 1454770800 20160206 1454684400 445 31150 0 0002 0000007 20160208 1454857200 20160206 1454684400 150 11768 -1268 0002 0000007 20160209 1454943600 20160206 1454684400 588 41160 0 0002 0000007 20160210 1455030000 20160206 1454684400 444 31080 0 $ cat data3 5 3 1 0 -1 -2 -3 -4
例(その2)
-r オプション(逆変換)
指定したフィールドの値(1970年1月1日0時0分0秒からの秒数=UNIX Time)を通常の年月日時分秒の14桁の表記に変換します。他のフォーマットにする場合は、出力後に self や dayslash などを利用します。
(元データ)
$ cat data 0001 0000007 201602010900 117 8335 -145 0001 0000007 201602031030 221 15470 0 0001 0000007 201602051200 85 5950 0 0001 0000007 201602061300 293 20527 -17 0001 0000007 201602071430 445 31150 0 0002 0000007 201602081500 150 11768 -1268 0002 0000007 201602091830 588 41160 0 0002 0000007 201602102000 444 31080 0
第3フィールドの各日時の12時間後の日時を求めます。
$ calclock 3 data | lcalc '$4 + 12 * 3600' | tee data2 | calclock -r 1 | tee data3 | self 2.1.12 | tee data4 | dayslash --output yyyy/mm/dd-HH:MM 1 > data5
(calclock -r 実行前)
$ cat data2 1454328000 1454506200 1454684400 1454774400 1454866200 1454954400 1455053400 1455145200
(calclock -r 実行後)
$ cat data3 1454328000 20160201210000 1454506200 20160203223000 1454684400 20160206000000 1454774400 20160207010000 1454866200 20160208023000 1454954400 20160209030000 1455053400 20160210063000 1455145200 20160211080000
(12時間後の日時)
$ cat data4 201602012100 201602032230 201602060000 201602070100 201602080230 201602090300 201602100630 201602110800
(整形後の日時)
$ cat data5 2016/02/01-21:00 2016/02/03-22:30 2016/02/06-00:00 2016/02/07-01:00 2016/02/08-02:30 2016/02/09-03:00 2016/02/10-06:30 2016/02/11-08:00
注意
注意1
YYYY に許される範囲は 1900 〜 9999 です。範囲を逸脱した場合やフィールドのフォーマットが正しくない場合は、結果が “xxxxxxxxxx”(正変換)、“xxxxxxxxxxxxxx”(逆変換)になります。
注意2
UNIX Time が UTC なので、正変換、逆変換ともにタイムゾーンや TZ 環境変数の影響を受けます。例えば、タイムゾーンが日本の場合は、次の様になります。
$ echo 19700101 | calclock 1 19700101 -32400 $ export TZ=0; echo 19700101 | calclock 1 19700101 0
注意3
例1の様に日付のみの計算で時刻を伴わない場合は、mdate の方が効率的です。
Version and Edition
Thu Jan 14 21:51:32 JST 2021
Edition : 2
© 2021 Universal Shell Programming Laboratory site