Következő: 9.1.3 tcl/tk
 Fel: 9.1.2 AWK mindenkinek
 Előző: 9.1.2.1 Válogassunk!
     Index 
Nézzünk egy picit bonyolultabb feladatot: készítsünk egy táblázatból három
másikat úgy, hogy
 közben koordináta transzformációt végzünk, mértékegységet
váltunk és a táblázat oszlopainak
 szélességét és sorrendjét is megváltoztatjuk
- mint ahogy bizonyára kitalálták - a táblázatokat bemenő adatként
felhasználó programok igényei szerint.
A kiinduló táblázat egy kristály elemi cellájában található 12 db. atom
koordinátáit tartalmazza - cellaméret egységekben. A mintának választott
kristály (Na2SO3) sajnos hexagonális, így a rendelkezésre álló koordináták
ferdeszögű koordinátarendszerben vannak megadva.
Az első eredményfájl úgynevezett XYZ adatfájl lesz, ami pl. az Xmol, Rasmol,
Molwin és hasonló
 programok által felismert adatformátum. Ebben az Angströmben
megadott koordinátákat egy
 kétsoros fejléc előzi meg (atomok száma és egy
címsor).
A második és a harmadik eredményfájl a DVscat nevű DV-Xa molekula modellező
programhoz
 szükséges. Hogy ne unatkozzunk, a második eredményfájlban
derékszögű rendszerben és atomi
 egységben kell megadni a koordinátákat, míg a
harmadikban - a bemenő fájlhoz hasonlóan - ferdeszögű rendszerben és cella
egységeket használva kell megadni az atomok pozícióját.
Táblázat:
A kiindulási adatsor (egy elemi cella két Na2SO3
egységet tartalmaz, s az egységcella oldalai: a = b = 5.4587 A; c=6.1792 A)
| atom | 
x/a | 
y/b | 
z/c | 
 
| S1 | 
0.33333 | 
0.66666 | 
0.1730 | 
 
| S2 | 
-0.33333 | 
-0.66666 | 
-0.1730 | 
 
| O3 | 
0.1313 | 
0.38200 | 
0.2683 | 
 
| O4 | 
-0.1313 | 
-0.38200 | 
-0.2683 | 
 
| O5 | 
0.3820 | 
0.25070 | 
-0.2683 | 
 
| O6 | 
-0.3820 | 
-0.25070 | 
0.2683 | 
 
| O7 | 
0.2507 | 
-0.1313 | 
0.2683 | 
 
| O8 | 
-0.2507 | 
0.1313 | 
-0.2683 | 
 
| Na9 | 
0 | 
0 | 
0 | 
 
| Na10 | 
0 | 
0 | 
0.5 | 
 
| Na11 | 
0.33333 | 
0.66666 | 
0.66666 | 
 
| Na12 | 
-0.33333 | 
-0.66666 | 
-0.66666 | 
 
 
 | 
 
A feladatot az alábbi programocskával oldottam meg, melyet így kell futtatni:
awk -f so3.awk Na2SO3
ahol Na2SO3 a táblázatban kilistázott
adatokat tartalmazza (fejléc nélkül),
 so3.awk az itt látható program, s az
eredmény pedig a Na2SO3.xyz, 
Na2SO3.f05 és Na2SO3.f03 fájlokba kerül.
Az so3.awk program listája
#Átszámolja a hexagonális Na2SO3 kristály egy elemi cellájában 
#levő atomok koordinátáit Descartes koordináta rendszerre.
# cx=cos 120 degs 
# cy=sin 120 degs
# x,y,z    ferdeszögű koordináták cella egységben
# xa,yb,zc Descartes koordináták (Angström egységekben)
# au       konverziós faktor az atomi hosszegység és az Angström között
# cella méret: a=5.4587 A ; c=6.1792 A
#
# Az első rekord beolvasásakor végezzük el az inicializálásokat
# Ezek egyrészét a BEGIN szekcióba is tehettük volna, 
# de a FILENAME változó ott még nem áll rendelkezésre!!!
NR==1 { a=5.4587; c=6.1792
        cx=-0.5;  cy=0.8660254
        au=0.529177
# Háromféle adatfájlt készítünk
        f1= FILENAME ".xyz"
        f2= FILENAME ".f05"
        f3= FILENAME ".f03"
# Az XYZ eredményfájl elejére fejlécet is írunk
        print 12 > f1
        print FILENAME " unit cell" >> f1
      }
#
# Az alábbi műveleteket minden beolvasott rekordra elvégezzük
      {
# A negtív koordinátákat eltolással a pozitív térnyolcadba transzformáljuk 
        x=$2; if (x<0) x=x+1
        y=$3; if (y<0) y=y+1
        z=$4; if (z<0) z=z+1
# Az egységcellát az origóra centráljuk
        x=x-0.5
        y=y-0.5
        z=z-0.5
# A ferdeszögű koordinátákat derékszögűvé transzformáljuk
        xa=(x+cx*y)*a
        yb=y*cy*a
        zc=z*c
# A koordinátákat és az atom nevét mindhárom fájlba kiírjuk
        printf("%-4s %8.5f %8.5f %8.5f\n", $1,xa,yb,zc) >> f1
printf("%20.10E%20.10E%20.10E%5s\n", xa/au,yb/au,zc/au,$1) >> f2
printf("%20.10E%20.10E%20.10E%5s\n", x,y,z,$1) >> f3
}
12
Na2SO3 unit cell
Táblázat:
Az Na2SO3.xyz eredményfájl listája
| S1 | 
-1.36468 | 
0.78786 | 
-2.02060 | 
 
| S2 | 
1.36468 | 
-0.78786 | 
2.02060 | 
 
| O3 | 
-1.69056 | 
-0.55783 | 
-1.43172 | 
 
| O4 | 
1.69056 | 
0.55783 | 
1.43172 | 
 
| O5 | 
0.03630 | 
-1.17853 | 
1.43172 | 
 
| O6 | 
-0.03630 | 
1.17853 | 
-1.43172 | 
 
| O7 | 
-2.36717 | 
1.74298 | 
-1.43172 | 
 
| O8 | 
2.36717 | 
-1.74298 | 
1.43172 | 
 
| Na9 | 
-1.36468 | 
-2.36369 | 
-3.08960 | 
 
| Na10 | 
-1.36468 | 
-2.36369 | 
0.00000 | 
 
| Na11 | 
-1.36468 | 
0.78786 | 
1.02983 | 
 
| Na12 | 
1.36468 | 
-0.78786 | 
-1.02983 | 
 
 
 | 
 
Táblázat:
Az Na2SO3.f05 eredményfájl listája
| -2.578863027E+00     1.488847700E+00    -3.818379106E+00   S1
2.578863027E+00    -1.488847700E+00     3.818379106E+00   S2
-3.194695518E+00    -1.054146337E+00    -2.705560975E+00   O3
3.194695518E+00     1.054146337E+00     2.705560975E+00   O4
6.859775652E-02    -2.227107474E+00     2.705560975E+00   O5
-6.859775652E-02     2.227107474E+00    -2.705560975E+00   O6
-4.473295807E+00     3.293760632E+00    -2.705560975E+00   O7
4.473295807E+00    -3.293760632E+00     2.705560975E+00   O8
-2.578863027E+00    -4.466721769E+00    -5.838500162E+00  Na9
-2.578863027E+00    -4.466721769E+00     0.000000000E+00 Na10
-2.578863027E+00     1.488847700E+00     1.946088874E+00 Na11
2.578863027E+00    -1.488847700E+00    -1.946088874E+00 Na12 | 
  | 
  | 
  | 
 
 
 | 
 
Táblázat:
Az Na2SO3.f03 eredményfájl listája
| -1.666700000E-01     1.666600000E-01    -3.270000000E-01   S1
1.666700000E-01    -1.666600000E-01     3.270000000E-01   S2
-3.687000000E-01    -1.180000000E-01    -2.317000000E-01   O3
3.687000000E-01     1.180000000E-01     2.317000000E-01   O4
-1.180000000E-01    -2.493000000E-01     2.317000000E-01   O5
1.180000000E-01     2.493000000E-01    -2.317000000E-01   O6
-2.493000000E-01     3.687000000E-01    -2.317000000E-01   O7
2.493000000E-01    -3.687000000E-01     2.317000000E-01   O8
-5.000000000E-01    -5.000000000E-01    -5.000000000E-01  Na9
-5.000000000E-01    -5.000000000E-01     0.000000000E+00 Na10
-1.666700000E-01     1.666600000E-01     1.666600000E-01 Na11
1.666700000E-01    -1.666600000E-01    -1.666600000E-01 Na12 | 
  | 
  | 
  | 
 
 
 | 
 
Ez az oldal elérhető:
http://esca.atomki.hu/dlug/commodus/awk.html
698
 
 
  
 
 Következő: 9.1.3 tcl/tk
 Fel: 9.1.2 AWK mindenkinek
 Előző: 9.1.2.1 Válogassunk!
     Index 
1999-09-17