- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- その他/Macで実験結果をまとめる へ行く。
- 1 (2012-12-12 (水) 19:12:00)
はじめに †
Macで実験した結果をまとめるときに使えるコマンドを紹介します.
環境はOS X 10.8.2 Mountain Lion,ターミナルのシェルは標準のbashです. 使用例の $ はbashのコマンド・プロンプトを表しています.(入力しません.)
目次 †
Tips †
コマンド †
空のファイルを作成する †
touchコマンド
$ man コマンド名
例:result.txt という名前のからのファイルを作成する.
$ man cat
文字列を出力する †
echoコマンド
$ touch ファイル名
例:done. と出力する
$ touch result.txt
ファイルの内容を出力する †
catコマンド
$ echo 文字列
ファイル名を指定しないときは,標準入力が対象となります.
例:ファイル foo とファイル bar の内容を続けて出力する.
$ echo "done."
例:ファイル result.txt の内容を行番号付きで出力する.
$ cat ファイル名1 ファイル名2 ...
ファイルの先頭を出力する †
headコマンド
$ cat foo bar
ファイル名を指定しないときは,標準入力が対象となります.
例:ファイル result.txt の最初の20行だけを出力する.
$ cat -n result.txt
ファイルの末尾を出力する †
tailコマンド
$ head -行数 ファイル名
ファイル名を指定しないときは,標準入力が対象となります.
例:ファイル result.txt の末尾20行だけを出力する
$ head -20 result.txt
指定した文字列を含む行だけを出力する †
grepコマンド
$ tail -行数 ファイル名
ファイル名を指定しないときは,標準入力が対象となります.
例:ファイル result.txt の中で # を含む行だけを出力する.
$ tail -20 result.txt
指定した正規表現を含む行だけを出力する †
egrepコマンド
$ grep 文字列 ファイル名
ファイル名を指定しないときは,標準入力が対象となります.
例:ファイル result.txt の中で行の先頭に # を含まない行だけを出力する
$ grep '#' result.txt
指定した文字列を置換する †
sedコマンド
$ egrep 正規表現 ファイル名
例:ファイル result.txt に含まれる文字列 XML を文字列 xml に置換する.
$ egrep -v '^#' ファイル名
ファイルの行数を調べる †
wcコマンド
$ sed 's/置換前文字列/置換後文字列/g' ファイル名
ファイル名を指定しないときは,標準入力が対象となります.
例:ファイル resutl.txt の行数を調べる
$ sed 's/XML/xml/g' result.txt
CSVファイルの指定した列だけを出力する †
cutコマンド
$ wc -l ファイル名
ファイル名を指定しないときは,標準入力が対象となります.
- dオプションは区切り文字を表します.
例:ファイル result.csv の2列目から4列目までを出力する
$ wc -l result.txt
CSVファイルを指定した列で並べ替える †
sortコマンド
$ cut -d, -f列番号 ファイル名
例:ファイル result.csv を2列目の辞書順に並べ替える.
$ cut -d, -f2-4 resutl.csv
例:ファイル result.csv を3列目の値の昇順に並べ替える.
$ sort -t, -kキー列番号 ファイル名
例:ファイル result.csv を1列目の値の降順に並べ替える.
$ sort -t, -k2 result.csv
CSVファイルの指定した列の合計を求める †
awkコマンド
$ sort -t, -k3 -n result.csv
例:ファイル result.csv の2列目の値の合計を求める
$ sort -t, -k1 -n -r result.csv
CSVファイルの指定した列の平均を求める †
awkコマンド
$ awk -F, 'BEGIN{s=0}{s+=$列番号}END{print s}' ファイル名
例:ファイル result.csv の3列目の値の合計を求める
$ awk -F, 'BEGIN{s=0}{s+=$2}END{print s}' result.csv
シェル †
規則性のある名前のファイルをまとめて指定する †
ワイルドカードを使います.
- * (アスタリスク)0文字以上の任意の文字列
- ? (クエスチョン・マーク)任意の1文字
- [文字列] (角かっこ)文字列に含まれる文字のいずれか
- [!文字列] (角カッコとエクスクラメーション・マーク)文字列に含まれない文字のいずれか
例:resultで始まり,拡張子が.txtであるファイルのリストを表示する.
$ awk -F, 'BEGIN{s=c=0}{sum+=$列番号;c++}END{print s/c}' ファイル名
例:result0.txtからresult9.txtのファイルの内容を続けて出力する.
$ awk -F, 'BEGIN{s=c=0}{s+=$3;c++}END{print s/c}' result.csv
複数の処理を連続して行う †
セミコロン ; で区切ります.
$ ls result*.txt
例:HelloとWorldを連続して出力する
$ cat result[0-9].txt
ある処理の出力を次の処理の入力にする †
パイプ | で区切ります.
処理1; 処理2
例:ファイル result.txt の # を含む行だけを出力し,行番号を付ける.
$ echo "Hello"; echo "World" Hello World
処理の結果をファイルに書き込む †
リダイレクション >
$ 処理1 | 処理2
例:ファイル result.txt に行番号を付けて n_result.txt に書き込む
$ grep '#' result.txt | cat -n
処理の結果をファイルの末尾に追加する †
リダイレクション >>
$ 処理 > ファイル名
例:ファイル result.txt の末尾に現在の時刻を追加する
$ cat -n result.txt > n_result.txt
複数のファイルに同じ処理をする †
作業ディレクトリーにresult*という複数のファイルがあるとします.
$ 処理 >> ファイル名
これは,次のように,一行でも書けます.
$ date >> result.txt
組み合わせ例 †
指定した文字列を含む行の数を調べる †
例:ファイル result.txt の中で,hit という文字列を含む行の数を調べる.
$ for i in ワイルドカードを含むファイル名 > do > 処理 > done
複数のファイルの指定した行だけをまとめて出力する †
例:ファイル名が result で始まり拡張子が .txt であるファイルの 10 行目だけをまとめて出力する.
$ for i in ワイルドカードを含むファイル名; do 処理; done
指定した行に指定した文字列を含むファイルの数を調べる †
例:ファイル名が result で始まり拡張子が .txt のファイルの中で10行目に success という文字列を含むファイルの数を調べる.
for i in result*.txt; do echo $i; done
気が向いたら追加します.