いま、MQTTでデータを送っていますが、データの最初のフィールドがエポックタイムになっています。なので、データをパッと見たところでは何時のデータなのか分かりません。
そこで、awkを使って普通の表示にしてやります。
まずは、最初のフィールドを切り出す必要があります。これは簡単で
awk -F, '{print $1}'
です。セパレータがコンマなので、-Fオプションで変更します。セパレータで区切られた最初のフィールドがプリントされます。
これだけだと
1418394962
1418395021
1418395081
1418395142
1418395202
なかんじなのでこれをdate コマンドで時刻表示に変換してあげます。
strftime()なる関数があるawk処理系もあるようですが、ここではシェルコマンドを使ってやってみました。
単純には
date -d @`cat data.txt|awk -F, '{print $1}'`
とやるとよさそうですが、複数行だとエラーします。
なので、各行ごとにdateコマンドが発行される必要があります。
ということはawk中で処理する必要があるということで。。。。
cat data.txt|awk -F, '{cmd="date -d @"$1; system(cmd)}'
これで、
2014年 12月 13日 土曜日 00:02:01 JST
2014年 12月 13日 土曜日 00:03:02 JST
2014年 12月 13日 土曜日 00:04:01 JST
2014年 12月 13日 土曜日 00:05:01 JST
こんな感じになります。ひとまずok。
で、さらに、この日付の後、データを表示しようとおもって、
cat data.txt|awk -F, '{cmd="date -d @"$1; system(cmd); print $2" "$3}'
とすると。。。。
2014年 12月 13日 土曜日 00:05:01 JST
1710 2004
2014年 12月 13日 土曜日 00:06:02 JST
1709 2002
2014年 12月 13日 土曜日 00:07:01 JST
1710 2003
コマンド実行結果に改行コードが入っているので、こんなになってしまいます。
これではいけないということで、色々調べてみると
cat data.txt|awk -F, '{cmd="date -d @"$1; cmd | getline result; close(cmd); print result " " $2" "$3}'
としてやるといいことが分かりました。変数にコマンドを書いて、それを実行して結果を得るために cmd | getline 変数(結果が入る) というのが想像できませんでした。
2014年 12月 13日 土曜日 00:09:01 JST 1710 2003
2014年 12月 13日 土曜日 00:10:02 JST 1710 2002
2014年 12月 13日 土曜日 00:11:02 JST 1709 2003
これで、望むフォーマットになりました。
日付と時間だけをプリントするのはdateコマンドにフォーマット指示を追加して
cmd= "date +\"%F %T\" -d @"
フォーマット内部にスペースを指定するためにはダブルクオートでフォーマットをくくる必要があります。awkにはバックスラッシュでダブルクオートをエスケープしておきます。