やりたいこと
テストなど、ログファイルを最後から別のファイルに切り出したいときに利用することがあり備忘のため記録しておきます。これで切り出して、あとはリダイレクトを利用してテストのエビデンスを取ったりしています。
動作確認した環境
- Ubuntu 16.04.4 LTS (※Windows Subsystem for Linuxにて実施)
- tail (GNU coreutils 8.25)
- Wc (GNU coreutils 8.25)
- awk (GNU Awk 4.1.3)
- CentOS (TODO:バージョン確認)
- GNU textutil 2.1
実施方法
xxxという名前のファイルの最後から表示させる(ログを切り出したい)
$ FILE=xxx; tail -F -n +$(( $(wc -l ${FILE} | awk '{print $1}') + 1)) ${FILE}
解説
- tail
- -F: ログ監視でおなじみのオプション。ファイルがローテーションしてもファイル名で追いかけてくれます。
- -n +NUM: NUM行目からtailすることができます。wcとawkを駆使してファイル+1の行数を指定します。
- wc
- -l: "行数 ファイル名"というのも、出力になります。
その他
- もともとは、会社でテストしている時に毎回ログを切り出すのが面倒になり、やっつけで作ってみました。スクリプトの中でバックグラウンドで実行して、そのスクリプト中の子プロセスをkillするようにして利用しています。
- 会社ではCentOSを使っていますが、Qiitaへの投稿は家で書いているため、Windows環境上のUbuntuで実行してみました。