====== スクリプト言語入門 ======
===== データの抽出 =====
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++;
}
}