====== スクリプト言語入門 ====== ===== データの抽出 ===== awk実習 ===== Lesson 1 ===== データが[[sample_in.text]]という名前のファイルに T Beta B-factor Energy Specific Heat 0.01 100.0 3.72008E-44 -1.0000000 3.72008E-40 0.02491 40.14452027 3.67668E-18 -1.0000000 5.92528E-15 0.03982 25.11300854 1.24039E-11 -1.0000000 7.8227E-09 ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... のような形で収容されていたとしよう。このファイルからTとEnergyだけのデータを抽出して T Energy 0.01 -1.0000000 0.02491 -1.0000000 0.03982 -1.0000000 ....... ....... ....... ....... ....... ....... のような内容のファイルをsample_out.dataという名前でつくるためには、ターミナルで $ awk '{print $1, $4}' sample_in.text > sample_out.data と入力する。必ず、カレントディレクトリを''sample_in.text''が存在するディレクトリにして行うこと。 ==== 練習 ==== ファイル[[sample.data|sample.data]]を作成し、以下のコマンドを実行し、その意味を考えよ。 $ awk '{print $0}' sample.data $ awk '{print NR, $0}' sample.data $ awk '{print NF, $0}' sample.data $ awk '{print $1}' sample.data $ awk '{print $2}' sample.data $ awk '{print $3}' sample.data $ awk '{if(NR!=1){print 1./$1}}' sample.data $ awk '{for(i=1;i<=NF;i++){print $i}}' sample.data $ awk '{for(i=1;i<=NF;i++){printf("%s ", $i)}}' sample.data $ awk '{for(i=1;i<=NF;i++){printf("%s ", $i);} printf("\n");}' sample.data ==== 演習 ==== 1/T vs Log(B-factor) のグラフを作成せよ。 ===== Lesson 2 ===== [[sample.data|sample.data]]を使ってフィッティングを行った後、その結果を用いてデータを変更し、縦軸をyからΔy(yの極小点からの変化分)に変更する。 #!/usr/bin/awk -f BEGIN{ c = -2.26108426652; } { x = $1; y = $2 - c; printf ("%lf %lf\n", x, y); } $ awk -f mk.awk sample4.text > sample4.data $ $ ./mk.awk -bash: ./mk.awk: Permission denied $ chmod +x mk.awk $ ./mk.awk sample4.text > sample4.data $ ==== 演習 ==== xについてもΔxに変換したグラフを作成せよ。 ===== Lesson 3 ===== Dacapoで計算した結果のtextファイルをどんなものでもよいので一つ用意する。(ここではsample_data.textという名前だとする) 以下のコマンドを実行し、その意味を考えよ。 $ cd Desktop/ $ grep TOT sample_data.text | more TOT: CPU time Total energy TOT: LDA GGA LDA TOT: PerdewZunger PerdewWang91 VosWilNus TOT: CPU time non-selfcons selfcons non-selfcons TOT: seconds eV eV eV TOT: 1017.8 -6803.5442 -6860.0279 -6802.5257 TOT: 1310.8 -6801.7251 -6859.0696 -6800.8858 TOT: 1593.9 -6793.3429 -6853.4954 -6792.4696 TOT: 1876.4 -6787.8535 -6852.2423 -6786.9467 . . . TOT: 5911.9 -6786.6510 -6851.1469 -6785.7052 $ imia:Desktop kimi$ grep TOT sample_data.text | awk '{print $4}' | more Total LDA VosWilNus non-selfcons eV -6860.0279 -6859.0696 -6853.4954 -6852.2423 -6851.3765 -6851.2690 . . . imia:Desktop kimi$ awk '/TOT/{print $4}' sample_data.text | more Total LDA VosWilNus non-selfcons eV -6860.0279 -6859.0696 -6853.4954 -6852.2423 -6851.3765 -6851.2690 -6851.6934 -6851.2849 . . . ==== 演習 ==== sample_data.textから次のようなファイルを作成し、グラフを描け。その後、縦軸は最後のエネルギーが0になるように変換し再度グラフにせよ。 N eV 1 -6860.0279 2 -6859.0696 3 -6853.4954 4 -6852.2423 5 -6851.3765 6 -6851.2690 7 -6851.6934 8 -6851.2849 . . . 112 -6851.2690 113 -6851.6934 114 -6851.2849 === ヒント === こんな感じのスクリプトを書く。 #!/usr/bin/awk -f BEGIN{ e0 = -6860.5345; i = 0; } /TOT/{ e = $4 + 0; if (e != 0) { printf ("%lf %lf\n", i, e - e0); i++; } }