cat のように標準入力かファイルの中身を出力するものですが、先頭行に日時がつきます。
https://github.com/ktat/tcat にあります。
なんで、こんなものが必要かというと、例えば、サーバの様子を top -b を記録して後からみたいなーとかいう時とかに...
% top -b >> top.log
みたいにしたすると、ファイルの中身はこんな感じ。
top - 00:44:33 up 16:59, 7 users, load average: 1.76, 1.75, 1.62 Tasks: 345 total, 1 running, 344 sleeping, 0 stopped, 0 zombie %Cpu(s): 30.3 us, 11.1 sy, 0.0 ni, 57.9 id, 0.4 wa, 0.0 hi, 0.2 si, 0.0 st KiB Mem : 16312908 total, 409000 free, 9663728 used, 6240180 buff/cache KiB Swap: 16657404 total, 16655344 free, 2060 used. 4595576 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9618 ktat 20 0 42952 3800 3140 R 12.5 0.0 0:00.03 top 5253 ktat 20 0 1745952 424904 69868 S 6.2 2.6 6:14.04 slack 5306 ktat 20 0 1497416 376924 181836 S 6.2 2.3 17:12.10 slack 1 root 20 0 185412 6012 3944 S 0.0 0.0 0:04.64 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd
後から見ようとした時に、どの時間のものだったのか調べようとすると....
top - 00:44:33 up 16:59, 7 users, load average: 1.76, 1.75, 1.62
ここにあるけど、とっても使いにくいし、日またいだら、どうするんだという感じなので...
% top -b | tcat >> top.log
とすることで、
2017-01-25 00:48:25: top - 00:48:25 up 17:03, 7 users, load average: 1.29, 1.63, 1.62 2017-01-25 00:48:25: Tasks: 341 total, 1 running, 340 sleeping, 0 stopped, 0 zombie 2017-01-25 00:48:25: %Cpu(s): 30.1 us, 11.0 sy, 0.0 ni, 58.3 id, 0.4 wa, 0.0 hi, 0.2 si, 0.0 st 2017-01-25 00:48:25: KiB Mem : 16312908 total, 582792 free, 9512076 used, 6218040 buff/cache 2017-01-25 00:48:25: KiB Swap: 16657404 total, 16655352 free, 2052 used. 4772668 avail Mem 2017-01-25 00:48:25: 2017-01-25 00:48:25: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2017-01-25 00:48:25: 9850 ktat 20 0 42952 3732 3076 R 12.5 0.0 0:00.03 top 2017-01-25 00:48:25: 1 root 20 0 185412 6012 3944 S 0.0 0.0 0:04.64 systemd 2017-01-25 00:48:25: 2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd 2017-01-25 00:48:25: 3 root 20 0 0 0 0 S 0.0 0.0 0:08.62 ksoftirqd/0 2017-01-25 00:48:25: 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
のように記録される(日付のフォーマットは自由に変えられます)ので、
% grep '2017-01-25 00:48' top.log
のようにして、検索しやすくなります。
で、作ってから気づいたのですが、まったく同じ名前の同様のコマンドが C で書かれていました。
https://github.com/marcomorain/tcat
orz
とりあえず、違いを出すために、cat のオプションを全て実装してみました("-n" 以外使ったことないけど)。
"-v", "-E", "-T" あたりの実装は、cat のソースコードからロジックをそのまま移した感じになります。