###################################################################
データ解析で良く使うコマンド集
###################################################################

・wc
  データの数を表示する、特にfortranなんかで何行あるか調べるのに便利。

[kazuono@hoge data]$ wc 660.11*.dat
    753    3761   35347 660.110.dat
    750    3746   35206 660.111.dat
    747    3731   35065 660.112.dat
    748    3736   35112 660.113.dat
    752    3756   35300 660.114.dat
    746    3726   35018 660.115.dat
    749    3741   35159 660.116.dat
    751    3751   35253 660.117.dat
    752    3756   35300 660.118.dat
    757    3781   35535 660.119.dat
   7505   37485  352295 合計

こんな感じ。


・sed、awk、grep
  とにかく重宝します、GMTを使っているのでシェルで何でも出来ます。
しかし書くことが多いのでここではカットしますが、ここがデータ解析で
中核をなします。言いかえるとsed、awk、grepが出来ないとシェルでは
データ解析できません。諦めてfortranやCで解析しましょう。


・for(foreach)
  単純なループです、今年の3月まではtcshを使っていたのでforeachを使って
いましたがzshを使うようになったのでbash系のforを使っています。

もし
/data/100.dat
/data/101.dat
/data/102.dat
/data/103.dat
/data/104.dat
/data/105.dat

があり、リスト100.datの中は
[kazuono@hoge data]$ cat /data/100.dat
100        2001/08/29
 Khromov Bussol Cruise 2001 CTD Data 
 45 16.840   144 30.700
 953.5
 Pr(dbar)  Temperature(C) Sal(psu)   Oxy(ml/l)
      0.000    15.0261    32.9109     6.1449
      1.000    15.0261    32.9109     6.1449
      2.000    15.0261    32.9109     6.1449
      3.000    15.0261    32.9109     6.1449
      4.000    15.0261    32.9109     6.1449
      5.000    15.0261    32.9109     6.1449
      6.000    15.0261    32.9109     6.1449
      7.000    14.9933    32.9024     6.1577
      8.000    14.9490    32.8910     6.1777
      9.000    14.9002    32.8814     6.1883
     10.000    14.8109    32.8651     6.1912


こんな感じになっていて、他のリストも同じ並びになっているとします。
ここでT-Sの情報のみを切り出します。まず読みたいリストファイルを作ります。

[kazuono@hoge data]$ cat list.dat
/data/100.dat
/data/102.dat
/data/103.dat
/data/105.dat

ここでファイルをループさせるために次のコマンドを実行する。

[kazuono@hoge data]$ for i in `cat list.dat`
for> do
for> sed '1,5d' $i |\          #5行目までのヘッダを切り取る
for> awk '{print $3,$2}'       #3列目(s)、2列目(T)をアウトプット
for> done

このforコマンドを実行することにより、100、102、103、105.datからT-Sのみを
切り出すことが出来ます。tcshの場合は
[kazuono@hoge ~]$ foreach i ( `cat list.dat` )
foreach> sed '1,5d' $i |\
foreach> awk '{print $3,$2}'
foreach> end
です。


あとpasteとか使えばアスキーデータはほとんど思い通りにデータを
切り出すことが出来ると思いますよ。

compトップに戻る