Nighthawk.dk

Data-analyse med Bash shell

Skrevet d. 15. Aug. 2020 af Claus Nielsen.

Data fra f.eks. computersimuleringer kommer ikke altid i et format, der kan smides direkte over i analyse-software som Origin, R, Matlab, Excel, osv. Ofte skal det relevante data først trækkes ud af filer og muligvis omformateres - og her er en Bash shell et rigtig godt værktøj.

Lad os forestille os, at vi har simuleret et molekyle vha. softwaren Gaussian, og har fået en lang output-fil. Et sted nede midt i filen står der følgende:

... Mere info i starten af filen
 InvSVY:  IOpt=1 It=  1 EMax= 2.66D-15
 Solved reduced A of dimension    22 with     3 vectors.
 Calculating GIAO nuclear magnetic shielding tensors.
 SCF GIAO Magnetic shielding tensor (ppm):
      1  C    Isotropic =   113.0347   Anisotropy =    16.9915
   XX=   111.9221   YX=     1.0827   ZX=     7.7450
   XY=     1.3633   YY=   124.0740   ZY=     6.2476
   XZ=     6.4851   YZ=    -4.2466   ZZ=   103.1081
   Eigenvalues:    99.1427   115.5992   124.3624
      2  C    Isotropic =     2.6274   Anisotropy =   156.9703
   XX=   -51.0008   YX=    -4.6748   ZX=    53.4116
   XY=    -9.7500   YY=   -29.4582   ZY=    -3.8611
   XZ=    55.6306   YZ=    -0.2797   ZZ=    88.3412
   Eigenvalues:   -70.7150   -28.6770   107.2743
      3  C    Isotropic =    69.3645   Anisotropy =    90.5505
   XX=    61.7339   YX=     3.9842   ZX=    24.3280
   XY=   -11.0795   YY=    25.2629   ZY=    -2.5887
   XZ=    22.4657   YZ=   -10.5831   ZZ=   121.0966
   Eigenvalues:    24.6919    53.6701   129.7315
... Resten af filen fortsætter

Nu kunne vi godt tænke os en liste over de isotrope og anisotrope værdier samt egenværdier (eigenvalues) for hvert atom i output-filen, så vi laver et Bash shellscript:

#!/bin/bash
ADFILE="$1.atomdata.temporary.dat"
EIGFILE="$1.eigenvalues.temporary.dat"
echo "Atom Isotropic Anisotropic" > $ADFILE
echo "Eig1 Eig2 Eig3" > $EIGFILE
grep "Isotropic =" $1 | tr -s " " | cut -d' ' -f2,6,9 >> $ADFILE
grep Eigenvalues: $1 | tr -s " " | cut -d' ' -f 3-5 >> $EIGFILE
paste -d' ' $ADFILE $EIGFILE | tr -s " "  > $2
rm $ADFILE
rm $EIGFILE

Nu kan scriptet køres på output-filen fra Gaussian, og resultatet ser således ud:

Atom Isotropic Anisotropic Eig1 Eig2 Eig3
1 113.0347 16.9915 99.1427 115.5992 124.3624
2 2.6274 156.9703 -70.7150 -28.6770 107.2743
3 69.3645 90.5505 24.6919 53.6701 129.7315
4 32.8351 91.8439 -64.3134 68.7543 94.0644
5 109.8781 221.1765 -114.3277 186.6330 257.3291
6 -205.7135 779.0873 -622.6531 -308.1653 313.6781
... data fortsætter

Nu er de data, der skal bruges, i et format som passer meget bedre til de fleste analyse-programmer (f.eks. Origin eller et regneark som Excel), og det shellscript, der blev brugt, kan bruges igen hver gang samme slags data skal udtrækkes af output-filer fra Gaussian.

Som eksemplet ovenfor illustrerer, kan en Bash shell være utroligt nyttig, og i denne artikelserie kan du lære at skrive dine egne shellscripts til både udtræk af data samt visualisering med simple plots.

Denne artikelserie er i øjeblikket ved at blive skrevet...

Artikler

Andet Bash / Shellscripting 1 - Introduktion til Bash shell Andet Bash / Shellscripting 2 - Shellscripts