vmstatの出力にタイムスタンプを並べて表示させる方法

vmstatコマンドはAIX環境付属のものはオプション指定により時刻を並べて合わせて表示することができますが、 他のOSでは時刻を表示させるオプションが用意されていません。本ページでは時刻を合わせて表示させる方法を記載します


実行方法

以下のようにawkコマンドでdateコマンドを挟むようにすることで時刻を表示させることができます。 なお、方法2、3の「\047」と「\x27」はそれぞれ8進数、16進数表記でシングルクォートを表しています。(つまり、date '+%Y/%m/%d %H:%M:%S'を実行させています)

方法1(フォーマット未指定のdateコマンドを出力)
vmstat 1 | awk '{"date" | getline date; print date " " $0; close("date")}'
表示例
Wed Oct 29 22:19:16 JST 2014 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
Wed Oct 29 22:19:16 JST 2014  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
Wed Oct 29 22:19:16 JST 2014  1  0    388 152604 114364 446988    0    0     1     1   15    8  0  0 100  0  0
Wed Oct 29 22:19:17 JST 2014  0  0    388 152356 114364 447016    0    0     0     0  107   69  0  0 99  0  1
Wed Oct 29 22:19:18 JST 2014  0  0    388 152232 114364 447016    0    0     0     0   62   30  0  0 99  0  0

方法2(16進数表記を用いてdateコマンドのフォーマットを指定する)
vmstat 1 | awk '{"date \x27+%Y/%m/%d %H:%M:%S\x27" | getline d; print d " " $0; close("date \x27+%Y/%m/%d %H:%M:%S\x27")}'
方法3(8進数表記を用いてdateコマンドのフォーマットを指定する)
vmstat 1 | awk '{"date \047+%Y/%m/%d %H:%M:%S\047" | getline d; print d " " $0; close("date \047+%Y/%m/%d %H:%M:%S\047")}'
表示例
2014/10/29 22:19:29 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
2014/10/29 22:19:29  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
2014/10/29 22:19:29  1  0    388 152620 114372 447016    0    0     1     1   15    8  0  0 100  0  0
2014/10/29 22:19:30  0  0    388 152232 114372 447016    0    0     0     0   77   58  0  1 100  0  0
2014/10/29 22:19:31  0  0    388 152232 114372 447016    0    0     0     0   61   36  0  0 99  0  1

注意点

・環境によってはawkではなくnawkで代替します。(確認した環境の中ではSoraris環境ではnawkで記載する必要がありました)

・環境によっては16進表記が不可なOS(シェル?)があります。(確認した環境の中ではAIX環境では16進数指定が不可でした)

★ORACLE案件承ります