seminar:データの抽出
スクリプト言語入門
データの抽出
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を作成し、以下のコマンドを実行し、その意味を考えよ。
$ 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を使ってフィッティングを行った後、その結果を用いてデータを変更し、縦軸を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++; } }
seminar/データの抽出.txt · 最終更新: 2022/08/23 13:34 by 127.0.0.1