その他/Macで実験結果をまとめる のバックアップ(No.1)


はじめに

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

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

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS