読者です 読者をやめる 読者になる 読者になる

データ分析エンジニアが気まぐれに更新するブログ

勉強してきた技術などを適当に書いていければと思います。

データファイル処理に扱っているコマンドラインツールについて

備忘録も兼ねて、Linux環境でデータファイルを加工したりしているときに扱っているコマンドラインツールをまとめてみました。


cat ファイル内容を表示する

ファイルの内容を標準出力に表示するコマンドです。

$ cat sample1.csv 
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86


head ファイルの先頭数行を表示する

ファイルを先頭から指定行数分だけ表示します。

ファイルサイズが大きすぎるときのちょっとしたフォーマットの確認や、ヘッダーの確認によく使います。

$ cat sample1.csv 
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86
$ head -3 sample1.csv # 先頭から3行だけ出力する
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
$ head -1 sample1.csv # 先頭から1行だけ出力する
都道府県名,人口(人),面積(平方km)


tail ファイルの末尾数行を表示する

ファイルを末尾から指定行数分だけ表示します。

こちらもちょっとしたデータの整合性などの確認のときに使ったりします。

$ cat sample1.csv 
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86
$ tail -3 sample1.csv # 末尾から3行だけ出力する
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86


grep 文字列を検索する

文字列の検索をします。

引数にファイル名を直接指定できますし、標準出力から検索することも多いです。

$ cat sample1.csv 
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86
$ grep 都 sample1.csv # 「都」を含む行を出力する
都道府県名,人口(人),面積(平方km)
東京都,13159388,2187.5
$ cat sample1.csv | grep 都
都道府県名,人口(人),面積(平方km)
東京都,13159388,2187.5


wc 行数・単語数・バイト数を表示する

行数、単語数、バイト数の順で表示します。

単語数は空白で区切られたものを単語として扱うみたいです。

標準出力も受け取れるので、オプション指定してよく条件指定で該当した行数を調べたりするときに使ったりします。

$ cat sample1.csv 
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86
$ wc sample1.csv 
8 8 237 sample1.csv
$ wc -l sample1.csv # 行数のみ表示する
8 sample1.csv
$ cat sample1.csv | grep 都 | wc -l
2


cut 列を抽出する

指定列のみ出力します。

オプションで -d で区切り文字を指定(デフォルトはタブ)、-f で列番号を指定して使うことが多いコマンドです。

$ cat sample1.csv 
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86
$ cut -d , -f 2 sample1.csv # 区切り文字をカンマ、2番目の列を表示する
人口(人)
2969770
2007683
2008068
7194556
6216289
13159388
9048331


sort 行を並び替える

ソートした内容を出力します。

下記のオプションをよく使うので、これらを用いて操作します。

-t : 区切り文字を指定する。デフォルトはスペース。
-k : ソートする列番号を指定する。
-n : 列のデータを数値とみなしてソートする。
-r : 逆順にする。

$ cat sample1.csv 
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86
$ sort sample1.csv 
茨城県,2969770,6095.72
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
神奈川県,9048331,2415.86
千葉県,6216289,5156.7
都道府県名,人口(人),面積(平方km)
東京都,13159388,2187.5
栃木県,2007683,6408.28
$ sort -t , -k 2 -n -r sample1.csv # 区切り文字カンマ、2番目の列を数値とみなして降順ソートする(人口の多い順にソート)
東京都,13159388,2187.5
神奈川県,9048331,2415.86
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
茨城県,2969770,6095.72
群馬県,2008068,6362.33
栃木県,2007683,6408.28
都道府県名,人口(人),面積(平方km)


uniq 重複した行を削除・表示する

重複した行を削除して表示します。

オプションの -c で重複している行数をカウントでき、 -d で逆に重複している行のみを出力できます。

ソート済みでないと有効にならないので注意が必要です。

$ cat sample9.csv 
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
群馬県,2008068,6362.33
東京都,13159388,2187.5
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86
東京都,13159388,2187.5
群馬県,2008068,6362.33
$ sort sample9.csv | uniq
茨城県,2969770,6095.72
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
神奈川県,9048331,2415.86
千葉県,6216289,5156.7
都道府県名,人口(人),面積(平方km)
東京都,13159388,2187.5
栃木県,2007683,6408.28
$ sort sample9.csv | uniq -c # 行数をカウントする
      1 茨城県,2969770,6095.72
      2 群馬県,2008068,6362.33
      1 埼玉県,7194556,3798.13
      1 神奈川県,9048331,2415.86
      1 千葉県,6216289,5156.7
      1 都道府県名,人口(人),面積(平方km)
      3 東京都,13159388,2187.5
      1 栃木県,2007683,6408.28
$ sort sample9.csv | uniq -d # 重複している行のみ出力する
群馬県,2008068,6362.33
東京都,13159388,2187.5
$ sort sample9.csv | uniq -c | sort -k 1 -n -r | head -3 # 重複している順にソートして上位3つのみ出力する
      3 東京都,13159388,2187.5
      2 群馬県,2008068,6362.33
      1 栃木県,2007683,6408.28


paste 行を水平方向に連結する

2つのファイルの行を連結できます。

オプションの -d で連結する際の区切り文字を指定できます。(デフォルトはタブ)

$ cat sample91.csv 
都道府県名,人口(人)
茨城県,2969770
栃木県,2007683
群馬県,2008068
埼玉県,7194556
千葉県,6216289
東京都,13159388
神奈川県,9048331
$ cat sample92.csv 
面積(平方km)
6095.72
6408.28
6362.33
3798.13
5156.7
2187.5
2415.86
$ paste -d , sample91.csv sample92.csv # 区切り文字カンマにして、水平方向に連結
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86


join 行を結合する

2つのファイルをキーを指定して結合することができます。

こちらもソート済みでないと有効にならないようです。

-1 : ファイル1のキーとする列番号。
-2 : ファイル2のキーとする列番号。
-t : 区切り文字を指定する。
-a : キーの値がもう片方のファイルに存在しない行も出力する。
-v : キーの値がもう片方のファイルに存在しない行のみ出力する。

$ cat sample91.csv 
茨城県,2969770
群馬県,2008068
埼玉県,7194556
神奈川県,9048331
千葉県,6216289
東京都,13159388
栃木県,2007683
$ cat sample92.csv 
6095.72,茨城県
6362.33,群馬県
3798.13,埼玉県
2415.86,神奈川県
5156.7,千葉県
2187.5,東京都
6408.28,栃木県
$ join -t , -1 1 -2 2 sample91.csv sample92.csv # 区切り文字をカンマとし、1つ目のファイルは1番目の列、2番目のファイルは2番目の列をキーとする
茨城県,2969770,6095.72
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
神奈川県,9048331,2415.86
千葉県,6216289,5156.7
東京都,13159388,2187.5
栃木県,2007683,6408.28


awk ファイルをスクリプトで処理する

大変便利なawkです。

列指定して抽出したり、条件指定したり、数値データを計算したり、文字列をパターンマッチしたり、とりあえず一通りのことは出来ると思います。

参考になるURLといくつかサンプルコードも載せておきます。

https://hydrocul.github.io/wiki/commands/awk.html"

http://www.e.ics.nara-wu.ac.jp/~nogu/tips/unix_command.html

$ cat sample1.csv 
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86
$ cat sample1.csv | awk -F , -v OFS=, '{print $2,$3}' # 入力区切り文字カンマ、出力区切り文字カンマにして2番目と3番目の列を出力する
人口(人),面積(平方km)
2969770,6095.72
2007683,6408.28
2008068,6362.33
7194556,3798.13
6216289,5156.7
13159388,2187.5
9048331,2415.86
$ awk -F , '{if($1 == "東京都" || $2 > 5000000) print}' sample1.csv # 入力区切り文字カンマで、1番目の値が東京都または2番目の値が5000000より大きい行を出力する
都道府県名,人口(人),面積(平方km)
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86
$ awk -F , '{sum += $2}END{print "sum:",sum,"avg:",sum/(NR-1)}' sample1.csv # 入力区切り文字カンマで、2番目の値の合計と平均(NRは行数でヘッダー分だけ引く)を表示する
sum: 42604085 avg: 6.0863e+06


q ファイルをSQLで処理する

SQLに慣れている人はこちらも使いやすいです。

CSVファイルやTSVファイルに対して、SQL文を書いてファイル処理を行なうことができます。

$ cat sample1.csv 
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86
$ q -O -H -d , "select * from sample1.csv where 人口(人) > 5000000" # SQLで検索する
都道府県名,人口(人),面積(平方km)
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86
$ cat sample1.csv | q -O -H -d , "select count(*) from -" # 標準出力はハイフンで受け取れる
count(*)
7
$ q -O -H -d , "select SUM(人口(人)) from sample1.csv" # SUMなどの関数も利用できる
SUM(人口(人))
42604085
$ q -O -H -d , "select 都道府県名,(人口(人)/面積(平方km)) as 人口密度 from sample1.csv" # 列間で計算する
都道府県名,人口密度
茨城県,487.189372215
栃木県,313.295143159
群馬県,315.618334792
埼玉県,1894.23637422
千葉県,1205.47811585
東京都,6015.72022857
神奈川県,3745.38714992
$ cat sample2.csv 
都道府県名,人口(人),面積(平方km)
滋賀県,1410777,4017.36
京都府,2636092,4613.21
大阪府,8865245,1898.47
兵庫県,5588133,8396.13
奈良県,1400728,3691.09
和歌山県,1002198,4726.29
$ q -O -H -d , "select * from sample1.csv union select * from sample2.csv order by 人口(人) desc limit 6"
都道府県名,人口(人),面積(平方km)
東京都,13159388,2187.5
神奈川県,9048331,2415.86
大阪府,8865245,1898.47
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
兵庫県,5588133,8396.13


SQLなので一通りのデータ処理を行なうことが出来ますので、SQL得意であれば便利なコマンドかと思います。

ちなみに俺はSQLよりもスクリプトが得意なので、普段使っているとか言いながら、あまり出番はありません笑

インストールは、CentOSUbuntuともに下記のqコマンドのサイトより、コマンドファイルをダウンロードできますので、これに実行権を与えて使えるようになります。


q : http://harelba.github.io/q/index.html


CentOS (CentOS 6.5 64bit), Ubuntu (Ubuntu-server 14.04 64bit)

$ sudo wget https://cdn.rawgit.com/harelba/q/1.5.0/bin/q
$ sudo chmod +x ./q
$ ./q --version
q version 1.5.0
Copyright (C) 2012-2014 Harel Ben-Attia (harelba@gmail.com, @harelba on twitter)
http://harelba.github.io/q/
$ sudo mv q /usr/local/bin/ # 使いやすいように、パスが通っている場所などに移動
$ q --version
q version 1.5.0
Copyright (C) 2012-2014 Harel Ben-Attia (harelba@gmail.com, @harelba on twitter)
http://harelba.github.io/q/


jq jsonファイルを処理する

jsonファイルを処理するときに便利なコマンドです。

$ cat sample1.json
{"data":[{"都道府県名":"茨城県","人口(人)":2969770,"面積(平方km)":6095.72},{"都道府県名":"栃木県","人口(人)":2007683,"面積(平方km)":6408.28},{"都道府県名":"群馬県","人口(人)":2008068,"面積(平方km)":6362.33},{"都道府県名":"埼玉県","人口(人)":7194556,"面積(平方km)":3798.13},{"都道府県名":"千葉県","人口(人)":6216289,"面積(平方km)":5156.7},{"都道府県名":"東京都","人口(人)":13159388,"面積(平方km)":2187.5},{"都道府県名":"神奈川県","人口(人)":9048331,"面積(平方km)":2415.86}]}
$ jq '.' sample1.json # そのまま表示する(見やすいようにインデント整形してくれる) 
{
  "data": [
    {
      "都道府県名": "茨城県",
      "人口(人)": 2969770,
      "面積(平方km)": 6095.72
    },
    {
      "都道府県名": "栃木県",
      "人口(人)": 2007683,
      "面積(平方km)": 6408.28
    },
    {
      "都道府県名": "群馬県",
      "人口(人)": 2008068,
      "面積(平方km)": 6362.33
    },
    {
      "都道府県名": "埼玉県",
      "人口(人)": 7194556,
      "面積(平方km)": 3798.13
    },
    {
      "都道府県名": "千葉県",
      "人口(人)": 6216289,
      "面積(平方km)": 5156.7
    },
    {
      "都道府県名": "東京都",
      "人口(人)": 13159388,
      "面積(平方km)": 2187.5
    },
    {
      "都道府県名": "神奈川県",
      "人口(人)": 9048331,
      "面積(平方km)": 2415.86
    }
  ]
}
$ jq '.data' sample1.json # dataキーの値を表示する
[
  {
    "都道府県名": "茨城県",
    "人口(人)": 2969770,
    "面積(平方km)": 6095.72
  },
  {
    "都道府県名": "栃木県",
    "人口(人)": 2007683,
    "面積(平方km)": 6408.28
  },
  {
    "都道府県名": "群馬県",
    "人口(人)": 2008068,
    "面積(平方km)": 6362.33
  },
  {
    "都道府県名": "埼玉県",
    "人口(人)": 7194556,
    "面積(平方km)": 3798.13
  },
  {
    "都道府県名": "千葉県",
    "人口(人)": 6216289,
    "面積(平方km)": 5156.7
  },
  {
    "都道府県名": "東京都",
    "人口(人)": 13159388,
    "面積(平方km)": 2187.5
  },
  {
    "都道府県名": "神奈川県",
    "人口(人)": 9048331,
    "面積(平方km)": 2415.86
  }
]
$ cat sample1.json | jq '.data[2]' # 標準出力からも受け取れる。dataキーの配列の3番目の値を表示する
{
  "都道府県名": "群馬県",
  "人口(人)": 2008068,
  "面積(平方km)": 6362.33
}
$ jq '.data[]|."都道府県名"' sample1.json # dataキーの配列の各要素にパイプして都道府県名キーを表示する 
"茨城県"
"栃木県"
"群馬県"
"埼玉県"
"千葉県"
"東京都"
"神奈川県"
$ cat sample1.json | jq '.data[]|."都道府県名", ."人口(人)"' # dataキーの配列の要素の各要素にパイプして都道府県名キーと人口キーの値を表示する
"茨城県"
2969770
"栃木県"
2007683
"群馬県"
2008068
"埼玉県"
7194556
"千葉県"
6216289
"東京都"
13159388
"神奈川県"
9048331

jsonファイルを操作するときは、このコマンドか、他のrubyなどのスクリプトで読み込んで処理するスクリプトを書くか、あとは普通にテキストとして編集するかしか私は知らないです。

インストールは、CentOSでは下記のjqのサイトからコマンドファイルをダウンロードして、実行権を与える方法が簡単でした。


jq : http://stedolan.github.io/jq/


CentOS (CentOS 6.5 64bit)

$ sudo wget http://stedolan.github.io/jq/download/linux64/jq
$ sudo chmod +x jq
$ ./jq --version
jq-1.4
$ sudo mv jq /usr/local/bin/ # 使いやすいように、パスが通っている場所などに移動
$ jq --version
jq-1.4


Ubuntuではパッケージ管理コマンドからインストールできます。

Ubuntu (Ubuntu-server 14.04 64bit)

$ sudo apt-get install jq
$ jq --version
jq version 1.3


Mコマンド(Nysol) 大規模なデータを処理する

Nysol : http://www.nysol.jp/

普通のファイル編集だとサイズが大きすぎるけど、データベースに突っ込むほどではないというデータファイルに対して、早い処理が行なえるというものらしいです。(むしろ突っ込むほどでも大丈夫か?)

データの前処理のスピードを比較したものがどこかに落ちていましたが、なんかデータベースよりも早かった気が笑

こちらも大体データ処理に必要な操作は揃っている感じで、データファイルに対していろんな操作が可能です。

$ cat sample1.csv 
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86
$ mcut f=都道府県名,人口(人) i=sample1.csv o=sample99.csv # 指定した列をファイルに出力する
#END# kgcut f=都道府県名,人口(人) i=sample1.csv o=sample99.csv; IN=7 OUT=7;
itoeiji@ubuntu:~/work/kanto$ cat sample99.csv 
都道府県名,人口(人)
茨城県,2969770
栃木県,2007683
群馬県,2008068
埼玉県,7194556
千葉県,6216289
東京都,13159388
神奈川県,9048331
$ cat sample0.csv 
都道府県コード,都道府県名
08,茨城県
09,栃木県
10,群馬県
11,埼玉県
12,千葉県
13,東京都
14,神奈川県
$ # パイプで標準出力を受け取って処理することも可能
$ cat sample1.csv | mjoin k=都道府県名 K=都道府県名 f=都道府県コード m=sample0.csv | \ # 参照ファイルで結合する
> mcal c='${人口(人)}/${面積(平方km)}' a=人口密度 | \ # 列同士で計算をする
> mfldname f=人口(人):人口,面積(平方km):面積 | \ # 列名を変更する
> msortf f=都道府県コード | \ # ソートする
> mcut f=都道府県コード,都道府県名,人口,面積,人口密度 o=sample99.csv # ファイルに出力する
#END# kgjoin K=都道府県名 f=都道府県コード k=都道府県名 m=sample0.csv; IN=7 OUT=7;
#END# kgfldname f=人口(人):人口,面積(平方km):面積; IN=7 OUT=7;
#END# kgcal a=人口密度 c=${人口(人)}/${面積(平方km)}; IN=7 OUT=7;
#END# kgsortf f=都道府県コード; IN=7 OUT=7;
#END# kgcut f=都道府県コード,都道府県名,人口,面積,人口密度 o=sample99.csv; IN=7 OUT=7;
$ cat sample99.csv
都道府県コード%0,都道府県名,人口,面積,人口密度
08,茨城県,2969770,6095.72,487.1893722
09,栃木県,2007683,6408.28,313.2951432
10,群馬県,2008068,6362.33,315.6183348
11,埼玉県,7194556,3798.13,1894.236374
12,千葉県,6216289,5156.7,1205.478116
13,東京都,13159388,2187.5,6015.720229
14,神奈川県,9048331,2415.86,3745.38715


こちらも、とにかくコマンドの種類がたくさんありますので、WEBのマニュアルを見て、やりたいことを試していけばと思います。

インストールはUbuntuが入れやすいです。明らかにエラーのようなメッセージが出てはいますが、これでMコマンドは使えるようです。

Ubuntu (Ubuntu-server 14.04 64bit)

$ sudo dpkg -i nysol_2.3-0_amd64.deb  
以前に未選択のパッケージ nysol を選択しています。
(データベースを読み込んでいます ... 現在 56099 個のファイルとディレクトリがインストールされています。)
Preparing to unpack nysol_2.3-0_amd64.deb ...
Unpacking nysol (2.3-0) ...
nysol (2.3-0) を設定しています ...
/var/lib/dpkg/info/nysol.postinst: 行 4: gem: コマンドが見つかりません
$ msummary --version
lib Version 2:0:1:0: mod Vesion 62b05c1d589f10416eef1b56956dc4f9ce1c6ce3


ちなみにCentOSにインストールしようとするとこうなりました。

CentOS (CentOS 6.5 64bit)

$ sudo rpm -ivh nysol-2.3-0.x86_64.rpm 
エラー: 依存性の欠如:
        libc.so.6(GLIBC_2.14)(64bit) は nysol-2.3-0.x86_64 に必要とされています
        libm.so.6(GLIBC_2.15)(64bit) は nysol-2.3-0.x86_64 に必要とされています
        libstdc++.so.6(GLIBCXX_3.4.15)(64bit) は nysol-2.3-0.x86_64 に必要とされています


とりあえず下記のようにパッケージを調べてみては入れてみたりしているのですが、それでも同じエラーで入らず。

うーん、わからん...。

$ yum provides libc.so.6
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
glibc-2.12-1.149.el6_6.9.i686 : The GNU libc libraries
Repo        : updates
Matched from:
Other       : libc.so.6

glibc-2.12-1.149.el6_6.4.i686 : The GNU libc libraries
Repo        : updates
Matched from:
Other       : libc.so.6

glibc-2.12-1.149.el6_6.7.i686 : The GNU libc libraries
Repo        : updates
Matched from:
Other       : libc.so.6

glibc-2.12-1.149.el6_6.5.i686 : The GNU libc libraries
Repo        : updates
Matched from:
Other       : libc.so.6

glibc-2.12-1.149.el6.i686 : The GNU libc libraries
Repo        : base
Matched from:
Other       : libc.so.6

$ yum provides libm.so.6
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
glibc-2.12-1.149.el6_6.9.i686 : The GNU libc libraries
Repo        : updates
Matched from:
Other       : libm.so.6

glibc-2.12-1.149.el6_6.4.i686 : The GNU libc libraries
Repo        : updates
Matched from:
Other       : libm.so.6

glibc-2.12-1.149.el6_6.7.i686 : The GNU libc libraries
Repo        : updates
Matched from:
Other       : libm.so.6

glibc-2.12-1.149.el6_6.5.i686 : The GNU libc libraries
Repo        : updates
Matched from:
Other       : libm.so.6

glibc-2.12-1.149.el6.i686 : The GNU libc libraries
Repo        : base
Matched from:
Other       : libm.so.6

$ yum provides libstdc++.so.6
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
libstdc++-4.4.7-11.el6.i686 : GNU Standard C++ Library
Repo        : base
Matched from:
Other       : libstdc++.so.6


nkf 文字コードを変換する

実際にデータを操作するものではないですが、文字コードの変換は地味に使うので、こちらもよく用います。

よく使うオプションは主に下記でしょうか。

-w : UTF-8 に変換する。
-s : Shift_JIS に変換する。
-Lu : 改行コードを LF(Unix形式)に変換する。
-Lw : 改行コードを CRLF(Windows形式)に変換する。
-Lm : 改行コードを CR(Mac形式)に変換する。

$ nkf -w sample1.csv # UTF-8 に変換して表示する
$ cat sample1.csv | nkf -w # 標準出力の内容を UTF-8 に変換して表示する


こちらもデフォルトではインストールされていない場合があるので、パッケージ管理コマンドでインストールします。

CentOS (CentOS 6.5 64bit)

$ sudo yum install nkf
$ nkf --version
Network Kanji Filter Version 2.0.8 (2007-07-20) 
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa),2000 S. Kono, COW
Copyright (C) 2002-2007 Kono, Furukawa, Naruse, mastodon


Ubuntu (Ubuntu-server 14.04 64bit)

$ sudo apt-get install nkf
$ nkf --version
Network Kanji Filter Version 2.1.3 (2013-11-22) 
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).
Copyright (C) 1996-2013, The nkf Project.


od ファイル内容をバイナリ表示する

こちらも何かとお世話になるときがあります。

例えば、改行コードの確認や、データの文字列を変換したいけどもうまく変換されないときに、このコマンドを使って対象文字列のコードを確認し、コードで変換して解決したりといった使い方をしています。

$ cat sample1.csv 
都道府県名,人口(人),面積(平方km)
茨城県,2969770,6095.72
栃木県,2007683,6408.28
群馬県,2008068,6362.33
埼玉県,7194556,3798.13
千葉県,6216289,5156.7
東京都,13159388,2187.5
神奈川県,9048331,2415.86
$ od -c sample1.csv # ASCII文字で表示する
0000000 351 203 275 351 201 223 345 272 234 347 234 214 345 220 215   ,
0000020 344 272 272 345 217 243 357 274 210 344 272 272 357 274 211   ,
0000040 351 235 242 347 251 215 357 274 210 345 271 263 346 226 271   k
0000060   m 357 274 211  \n 350 214 250 345 237 216 347 234 214   ,   2
0000100   9   6   9   7   7   0   ,   6   0   9   5   .   7   2  \n 346
0000120 240 203 346 234 250 347 234 214   ,   2   0   0   7   6   8   3
0000140   ,   6   4   0   8   .   2   8  \n 347 276 244 351 246 254 347
0000160 234 214   ,   2   0   0   8   0   6   8   ,   6   3   6   2   .
0000200   3   3  \n 345 237 274 347 216 211 347 234 214   ,   7   1   9
0000220   4   5   5   6   ,   3   7   9   8   .   1   3  \n 345 215 203
0000240 350 221 211 347 234 214   ,   6   2   1   6   2   8   9   ,   5
0000260   1   5   6   .   7  \n 346 235 261 344 272 254 351 203 275   ,
0000300   1   3   1   5   9   3   8   8   ,   2   1   8   7   .   5  \n
0000320 347 245 236 345 245 210 345 267 235 347 234 214   ,   9   0   4
0000340   8   3   3   1   ,   2   4   1   5   .   8   6  \n
0000355