ちょっとブレイクタイム Linuxで複数行(単位)を1行にするTips [Tips]
今日は、久しぶりに感動するコマンドに出会いました。それは、pasteコマンドです。知っている方は多数いると思いますが、Unix系を10年ぐらいかじってますが、やっと出会いました。仕事で3行単位に繰り返しデータが書いてある100MB程度のテキストファイル(ログファイル)が数10ファイルあり、時間単位の集計をするため、なんとか簡単に3行を1行のCSVファイルにできないか考えていたところ、googleでここがヒットしました。
さて、使い方をお知らせしたいと思います。
1.複数行(単位)を1行にする
たとえば、以下のようなファイルがあったとします。ファイル名はa.logとしておきましょう。
time:2010/11/01 10:00:00
user:assimane
operation:search
time:2010/11/01 10:00:01
user:assimane
operation:update
time:2010/11/01 10:10:05
user:taro
operation:update
このファイルは3行単位にデータが繰り返されています。
この3行を1行に,(カンマ)区切りにするには、以下のようにします。
cat a.log | paste -d , - - -
time:2010/11/01 10:00:00,user:assimane,operation:search
time:2010/11/01 10:00:01,user:assimane,operation:update
time:2010/11/01 10:10:01,user:taro,operation:update
4行単位ならば、-の数をもうひとつ増やします。
cat a.log | paste -d , - - - -
本当に簡単に1行にまとめられました。
2.2つのファイルの連結する
例えば、以下のようなファイルがあったとします。
ファイル:aaa
1
2
3
ファイル:bbb
a
b
c
この2つのファイルを,(カンマ)で連結します。
paste -d , aaa bbb
1,a
2,b
3,c
この程度なら、エクセルでも可能ですね。。。
見ていただいた方のお役に立てれば幸いです。
さて、使い方をお知らせしたいと思います。
1.複数行(単位)を1行にする
たとえば、以下のようなファイルがあったとします。ファイル名はa.logとしておきましょう。
time:2010/11/01 10:00:00
user:assimane
operation:search
time:2010/11/01 10:00:01
user:assimane
operation:update
time:2010/11/01 10:10:05
user:taro
operation:update
このファイルは3行単位にデータが繰り返されています。
この3行を1行に,(カンマ)区切りにするには、以下のようにします。
cat a.log | paste -d , - - -
time:2010/11/01 10:00:00,user:assimane,operation:search
time:2010/11/01 10:00:01,user:assimane,operation:update
time:2010/11/01 10:10:01,user:taro,operation:update
4行単位ならば、-の数をもうひとつ増やします。
cat a.log | paste -d , - - - -
本当に簡単に1行にまとめられました。
2.2つのファイルの連結する
例えば、以下のようなファイルがあったとします。
ファイル:aaa
1
2
3
ファイル:bbb
a
b
c
この2つのファイルを,(カンマ)で連結します。
paste -d , aaa bbb
1,a
2,b
3,c
この程度なら、エクセルでも可能ですね。。。
見ていただいた方のお役に立てれば幸いです。
とても大きなファイルだと1.ができない例が多くて、シェルだかcatの実装だかに依存する部分があるのでは
by ぽんこつ戦艦 (2013-05-28 11:24)
おおお、すごい。
行結合は苦手意識がありましたが、
これは余裕ですね。ありがとうございます。
by norio (2013-06-19 00:01)