Download presentation
Presentation is loading. Please wait.
1
UNIX系コンピュータの使い方 CUIへのいざない 2006年6月20日 玉川
2
UNIX: 1969 ATT Bell Laboratories
C言語化 (C の開発) (Ken Thompson, Dennis Ritchie) カリフォルニア大学バークレイ校のグループが、 DARPA (国防総省の一部)の予算で拡張 (80年ころから) 80年代に、日本語化、 Xウィンドウシステム、 TCP/IP。。。。
3
FreeのUNIX系OS BSD系 (FreeBSD NetBSD ...) バークレイ版UNIXから派生 Linux 1991 ヘルシンキ大学の学生 Linus Torvalds が作成 これらを支えるのが多数のフリーソフト ”GNUプロジェクト”
4
Linux でも FreeBSD でもユーザから見ると
大して違わない現代のUNIXシステム。 MS Windows XP などど同レベルのOS.。 ただし堅牢、本格的マルチユーザ環境」。 Linux(のようなもの)を Windows の 1アプリケーションにしたものが、Cygwin ということで、どれでも大体同じ。 ここでは Windows ユーザを考えて Cygwin を紹介する。
5
Cygwin ” からダウンロードできる。 setup.exe を実行して、 Install を選択 途中で、package のリストがでるので、 default ではなく、すべてを Install しておく。 かなり多量のファイル転送を伴うので注意。
6
UNIX系OSでは、GUIもあるが、それでは
わざわざ使う意味が薄い。 CUI (Character User Interface) を 使ってこそうれしいことがある。 コマンド入力で作業しましょう!
7
ディレクトリ (= フォルダ) 階層構造をしていて、すべてのファイルは あるディレクトリに属している。またユーザの 行う作業も今作業しているディレクトリと いうものがある。 階層の区切りは / 一番上は / のみのディレクトリ たとえば、Cygwin を起動して最初にいるのは /home/Administrator (ユーザ Administratorの場合) . は今いる場所 .. は一つ上の階層を示す。 Windows のcドライブは、 /cygdrive/c に見える ようになっている。
8
ディレクトリ・ファイル関連のコマンド cd 移動 ls 一覧 rm (ファイルの)消去 mv ファイルの移動、名前の変更 cp コピー mkdir ディレクトリの作成 rmdir ディレクトリの削除
9
cd change directory cd aaa 今いるディレクトリにある aaa と いうディレクトリに移動
いうディレクトリに移動 cd ../bbb 一つ上の階層のディレクトリにある bbb へ移動 cd /usr/bin /usr/bin へ移動 cd 自分のホームディレクトリへ移動 ( /home/Administrator など )
10
ls list ls 今いるディレクトリ内にあるファイル一覧 ls ファイル名 あるいは ディレクトリ名
指定したファイルやディレクトリに対して 実行 ls -a . で始まる隠しファイルも表示 ls -l サイズや所有者などの情報も表示
11
cp mv copy move cp A B ファイルAをBにコピー Bが既存のディレクトリ名の時、 そのディレクトリにコピー
cp mv cp A B ファイルAをBにコピー Bが既存のディレクトリ名の時、 そのディレクトリにコピー cp aaa bbb ccc dir dir は既存のディレクトリ名 aaa bbb ccc を dir へコピー cp -r A B ディレクトリAをその中身ごとBへ コピー mv aaa bbb aaa の名前を bbb に 変更
12
rm remove rm ファイル名 ファイルの消去 rm -r ディレクトリ名 ディレクトリ(中身ごと)の消去
ディレクトリ(中身ごと)の消去 mkdir rmdir はそのまま mkdir ディレクトリ名 ディレクトリを作る mkdir -p A/B/C (なければ) A を作ってその下に B をつくり、さらにその下にCを作る。
13
シェル キーボードから入力した文字列を解釈して ソフトを起動したりするなどの処理をする。 いつも動いていて入力を待っている。 テキストファイルを入力することもできる。 正規表現 A* Aで始まるこのディレクトリにあるファイル [ab]..C*txt a または b で始まり、2文字後がCで、その後 任意の文字があってtxtで終わるファイル
14
じゃあ、そろそろ動かしてみましょう。 Cygwin のアイコンをクリックして、 開いたターミナルに startx と打って 始めてみます。 コマンドやファイル名は、途中まで 入力して、TABを押すと残りを補完して くれたり、矢印で以前のコマンドを表示したり、 いろいろ助けてくれます。
15
データファイルを C:\sygwin\home\Administrator に 移動。 あとは Cygwin 上で作業 mkdir WORK
まず firefox (IEでもできる) から、気象観測データをダウンロード データファイルを C:\sygwin\home\Administrator に 移動。 あとは Cygwin 上で作業 mkdir WORK cd WORK mv ../c50_meteo_0510_30min_L1.csv ./ sed 's/:/, /' < c50_meteo_0510_30min_L1.csv\ | awk -F, '{print $2+ $3/24+$4/(60*24), $7}'\ | tail +2 |xgraph -bb -tk -t '7th column' -x 'day of year' sed から始まる3行は、行末の\を外して1行に 書いた。(こういう風に分けてもOKだけど)
17
ちゃんと1つ1つ解説 sed 's/AAA/BBB/' < ファイル名 ファイルから1行ずつ読んでその中のAAAという 文字列をBBBに置換。 < は、標準入力を指定したファイルにする記号 | は、前のコマンドの結果(標準出力)を 次のコマンドの標準入力へ渡す
18
| awk -F, '{print $2+ $3/24+$4/(60*24), $7}' |
$ カラム目の数字(文字) $2+$3/24+$4/(60*24) 日と時間と分を足してるだけ print 出力する記号 awk は {} 内の動作を読み込んだデータ1行毎に 実行する。 今回の例では|で、次の xgraph に 渡しているけれど > でファイルにも書き出せる。
19
man tail +2 2行目以降を出力 xgraph クイックルックに便利だけれど省略 各コマンドのマニュアルは
(デモで使っている? Cygwin は日本語化して ないので、英語だけれど、通常の Linux 等 では、日本語で見れる) コマンド名以外に、設定ファイル、Cの関数など いろいろ見れる。
20
シェル コマンドはキーボードから入力するだけでなく ファイルに書いておいても良い。 (シェルスクリプトと呼ぶ) たとえば scr.tcsh というファイルに (tcsh の文法で)スクリプトを書いたら、 tcsh scr.tcsh と実行する。 シェルには文法があり、ただのコマンドの羅列 以上の処理が可能
21
第2カラム(通算日)が300のデータの平均値を 求める。 sed 's/:/, /' < c50_meteo_0510_30min_L1.csv \ | tail +2\ | awk -F, '{if($2==300) {sum=sum+$8; count++}}\ END{print sum/count}' if内の条件式で、 == が等しいの意味、 < > <= >= はそのまま {}をデータの各行に対して実行、命令は;で区切って 並べることができる。 最後に END{ } を実行する。 (実は、BEGIN { } もある)
22
awk -F, '{if($2==300) {sum=sum+$8; count++}}\ END{print sum/count}'
これは、たとえば scr.awk という名前で {if($2==300) { sum=sum+$8; count++; } } END{ print sum/count; というファイルを作っておき awk -F, -f scr.awk としても同じである。
23
日毎に分けて、平均PARを出すサンプル PAR itemlist_c50.pdf には 52-57カラムと 書かれている。前に、5つ項目が入るので awk では、57-62 カラムになるはず。同様にタワー 頂上は 52 日毎に分けると言った繰り返し処理には、 tcsh の機能である foreach 構文が便利。 (bash など他のシェルにも同様の機能がある) awk で if を使って、特定の日だけを取り出す 処理を上の foreach と組み合わせて利用する。
24
シェルスクリプト set DATA = c50_meteo_0510_30min_L1.csv
sed 's/:/,/' < ${DATA} | tail +2 > ${DATA}-tmp cat << EOF > eachday.awk { if(\$2==DAY) print \$0; } EOF foreach t ( ) sed s/DAY/${t}/ < eachday.awk > tmp.awk awk -F, -f tmp.awk < ${DATA}-tmp > ${t}.csv end echo -n $t " " >> Meandata awk -F, -f awk2.scr < ${t}.csv >> Meandata
25
awk で 1ファイルの PAR関連 項目の 平均を求める 処理 awk2.scr BEGIN {
for(i=1; i<=62; i++){ sum[i] = 0.0; count[i] = 0; } { for(i=1; i<=62; i++) { if( $i > ) { sum[i] += $i; count[i]++; END { sum[52] /= count[52]; sum[53] /= count[53]; for(i=57; i<=62; i++) { sum[i] /= count[i]; print sum[52], sum[53], sum[57], sum[58], sum[59],\ sum[60], sum[61], sum[62]; awk で 1ファイルの PAR関連 項目の 平均を求める 処理 awk2.scr
26
このファイル名を PARAns.gnuplot として gnuplot PARABS.gnuplot とすると、
set terminal post color "Helvetica" 18 set output "PARAbs.ps" set title "PAR absorption at C50" set xlabel "day of the year" plot "Meandata" using 1:($4/$2) title "No.1" wi linespoints,\ "Meandata" using 1:($5/$2) title "No.2" wi linespoints,\ "Meandata" using 1:($6/$2) title "No.3" wi linespoints,\ "Meandata" using 1:($7/$2) title "No.4" wi linespoints,\ "Meandata" using 1:($8/$2) title "No.5" wi linespoints,\ "Meandata" using 1:($9/$2) title "No.6" wi linespoints,\ "Meandata" using 1:($3/$2) title "Ref" wi linespoints,\ "Meandata" using 1:(($4+$5+$6+$7+$8+$9)/(6*$2)) title "Mean Abs." wi gnuplot のスクリプト このファイル名を PARAns.gnuplot として gnuplot PARABS.gnuplot とすると、 PARAbs.ps というps画像ファイルにグラフが でる。
28
普通は、この辺か、もう少し簡単なあたりで
awk やシェルから、C言語あるいは Fortran に 移る。 それでも、グラフ作成は、gnuplot や GMT 多数のファイルの操作などは、tcsh を使うことが 多い。 Cygwin には、C90 + 拡張の cc (gcc)と Fortran77 + 拡張の f77 (g77) が入っている
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.