Macで実験結果をまとめる

2012-12-12 (水) 19:22:57 (4145d) | Topic path: Top / その他 / Macで実験結果をまとめる

はじめに

Macで実験した結果をまとめるときに使えるコマンドを紹介します.

環境はOS X 10.8.2 Mountain Lion,ターミナルのシェルは標準のbashです. 使用例の $ はbashのコマンド・プロンプトを表しています.(入力しません.)

それぞれのコマンドの使い方は,manコマンドで調べてください.

$ man コマンド名

:cat コマンドの使い方を調べる.

$ man cat

目次

Tips

コマンド

空のファイルを作成する

touchコマンド

$ touch ファイル名

:result.txt という名前のからのファイルを作成する.

$ touch result.txt

文字列を出力する

echoコマンド

$ echo 文字列

:done. と出力する

$ echo "done."

ファイルの内容を出力する

catコマンド

$ cat ファイル名1 ファイル名2 ...

ファイル名を指定しないときは,標準入力が対象となります.

:ファイル foo とファイル bar の内容を続けて出力する.

$ cat foo bar

:ファイル result.txt の内容を行番号付きで出力する.

$ cat -n result.txt

ファイルの先頭を出力する

headコマンド

$ head -行数 ファイル名

ファイル名を指定しないときは,標準入力が対象となります.

:ファイル result.txt の最初の20行だけを出力する.

$ head -20 result.txt

ファイルの末尾を出力する

tailコマンド

$ tail -行数 ファイル名

ファイル名を指定しないときは,標準入力が対象となります.

:ファイル result.txt の末尾20行だけを出力する

$ tail -20 result.txt

指定した文字列を含む行だけを出力する

grepコマンド

$ grep 文字列 ファイル名

ファイル名を指定しないときは,標準入力が対象となります.

:ファイル result.txt の中で # を含む行だけを出力する.

$ grep '#' result.txt

指定した正規表現を含む行だけを出力する

egrepコマンド

$ egrep 正規表現 ファイル名

ファイル名を指定しないときは,標準入力が対象となります.

:ファイル result.txt の中で行の先頭に # を含まない行だけを出力する

$ egrep -v '^#' ファイル名

指定した文字列を置換する

sedコマンド

$ sed 's/置換前文字列/置換後文字列/g' ファイル名

:ファイル result.txt に含まれる文字列 XML を文字列 xml に置換する.

$ sed 's/XML/xml/g' result.txt

ファイルの行数を調べる

wcコマンド

$ wc -l ファイル名

ファイル名を指定しないときは,標準入力が対象となります.

:ファイル resutl.txt の行数を調べる

$ wc -l result.txt

CSVファイルの指定した列だけを出力する

cutコマンド

$ cut -d, -f列番号 ファイル名

ファイル名を指定しないときは,標準入力が対象となります.

  • dオプションは区切り文字を表します.

:ファイル result.csv の2列目から4列目までを出力する

$ cut -d, -f2-4 resutl.csv

CSVファイルを指定した列で並べ替える

sortコマンド

$ sort -t, -kキー列番号 ファイル名

:ファイル result.csv を2列目の辞書順に並べ替える.

$ sort -t, -k2 result.csv

:ファイル result.csv を3列目の値の昇順に並べ替える.

$ sort -t, -k3 -n result.csv

:ファイル result.csv を1列目の値の降順に並べ替える.

$ sort -t, -k1 -n -r result.csv

CSVファイルの指定した列の合計を求める

awkコマンド

$ awk -F, 'BEGIN{s=0}{s+=$列番号}END{print s}' ファイル名

:ファイル result.csv の2列目の値の合計を求める

$ awk -F, 'BEGIN{s=0}{s+=$2}END{print s}' result.csv

CSVファイルの指定した列の平均を求める

awkコマンド

$ awk -F, 'BEGIN{s=c=0}{sum+=$列番号;c++}END{print s/c}' ファイル名

:ファイル result.csv の3列目の値の合計を求める

$ awk -F, 'BEGIN{s=c=0}{s+=$3;c++}END{print s/c}' result.csv

シェル

規則性のある名前のファイルをまとめて指定する

ワイルドカードを使います.

  • * (アスタリスク)0文字以上の任意の文字列
  • ? (クエスチョン・マーク)任意の1文字
  • [文字列] (角かっこ)文字列に含まれる文字のいずれか
  • [!文字列] (角カッコとエクスクラメーション・マーク)文字列に含まれない文字のいずれか

例:resultで始まり,拡張子が.txtであるファイルのリストを表示する.

$ ls result*.txt

例:result0.txtからresult9.txtのファイルの内容を続けて出力する.

$ cat result[0-9].txt

複数の処理を連続して行う

セミコロン ; で区切ります.

処理1; 処理2

例:HelloとWorldを連続して出力する

$ echo "Hello"; echo "World"
Hello
World

ある処理の出力を次の処理の入力にする

パイプ | で区切ります.

$ 処理1 | 処理2

例:ファイル result.txt の # を含む行だけを出力し,行番号を付ける.

$ grep '#' result.txt | cat -n

処理の結果をファイルに書き込む

リダイレクション >

$ 処理 > ファイル名

:ファイル result.txt に行番号を付けて n_result.txt に書き込む

$ cat -n result.txt > n_result.txt

処理の結果をファイルの末尾に追加する

リダイレクション >>

$ 処理 >> ファイル名

:ファイル result.txt の末尾に現在の時刻を追加する

$ date >> result.txt

複数のファイルに同じ処理をする

for

$ for i in ワイルドカードを含むファイル名
> do
> 処理
> done

次のように一行でも書けます.

$ for i in ワイルドカードを含むファイル名; do 処理; done

:ファイル名が result で始まり拡張子が .txt であるファイルの名前を出力する.

for i in result*.txt; do echo $i; done

組み合わせ例

指定した文字列を含む行の数を調べる

:ファイル result.txt の中で,hit という文字列を含む行の数を調べる.

$ grep hit result.txt | wc -l

複数のファイルの指定した行だけをまとめて出力する

:ファイル名が result で始まり拡張子が .txt であるファイルの 10 行目だけをまとめて出力する.

$ for i in result*.txt; do head -10 $i | tail -1; done

指定した行に指定した文字列を含むファイルの数を調べる

:ファイル名が result で始まり拡張子が .txt のファイルの中で10行目に success という文字列を含むファイルの数を調べる.

$ (for i in result*.txt; do head -10 $i | tail -1 | grep success; done) | wc - l

気が向いたら追加します.

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS