Unixコマンドによるデータ処理
一時期研究で,データの集計処理をよくやったので,その時学んだこと,使用したUnixコマンドのまとめ.
WindowsでUnixコマンドを使いたいなら是非ともCygwinを入れてminttyを使いましょう.
私の環境はCygwinだったので,Unixコマンドとか言っておきながら,以下の内容はどちらかといえばCygwin向け.
データの表現形式
Unixコマンドに適したデータ形式はTSV(Tab Separated Values)だ.XMLやCSVはUnixコマンドに向いていない場面が多くて使いづらい.
さらにWindowsでは,改行文字をLFに統一した方がいい.後で触れるが,perlを使用することを考えると,改行文字はLFで統一されるべき.
入出力コマンド
cat,more,teeの3つはデータ処理をする際の最重要コマンドである.以下それぞれの役割.
- catはデータの入力に使用.ファイルを引数に取れるコマンドもあるが,統一性があるとは言いがたく使いづらいので,catで統一したほうが楽
- moreはコマンドが望みどおりに動いているか確認するために使用.とにかくまずはmoreで確認してから実行しなきゃ危険.
- teeはデータの処理結果を出力するのに使用.出力するだけならリダイレクトでもいい.しかし,処理が止まっていないか確認するためには,出力が見られる状態にしておく必要がある.teeはコンソールへの出力とファイルリダイレクトを素直にやってくれる.
データの抽出コマンド
TSVファイルを使っていると,2カラム目のデータだけを取りたい,ということがよくある.そういうときにはcutをfオプションつきで使おう.2カラム目を取り出したければ,
- cut -f2
と実行すればよい.2から5カラム目を取り出したいのなら,
- cut -f2-5
2カラム目を取り出したいのなら
- cut -f2-
とする.
データの表現形式としてTSVを進める理由は,このようにUnixコマンドとの相性が良いからなのだ.
ソート
要素のソートにはその名もずばりsortを使う.詳細は,http://linuxjm.sourceforge.jp/html/gnumaniak/man1/sort.1.html
で確認して欲しい.
数値のソートには-nオプションを使用し,降順でソートしたい場合は-rをオプションを併用する.
その他便利なオプションには-kオプションが挙げられる.これはソートする際に使用するフィールドのカラムを指定するオプションで,2カラム目の値だけでソートしたければ,
- sort -k2
と書く.
重複排除とカウント
重複した要素を削除したい状況はよくある.このときはuniqコマンドを使用する.-cオプションを併用することで,入力対象のデータ中にある要素を数えることができる.これが非常に便利.
なお,uniqは必ず事前にデータをソートしておかなければならない.要注意