PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Bash + Awk] Konfigurationsdatei zeilenweise auslesen



-jm-
03-09-2004, 17:54
Hallo!

Ich will mit Hilfe von awk eine Konfigurationsdatei auslesen, welche folgende Form hat:

#Kommentar
/Path1_1 /Path2_1 #Kommentar
/Path1_2 /Path2_2
/Path1_3 /Path2_3
Kommentare und Leerzeilen entferne ich dabei per awk '{gsub(/#.*/, "")} /[^\n].*/'.
Mein eigentliches Problem ist, dass ich jetzt alle Path1_n und Path2_n in gesonderten Bash-Arrays zur Weiterverarbeitung ausgeben will.
Mein bisheriger (ziemlich häßlicher) Ansatz:

awk '{gsub(/#.*/, "")} /[^\n].*/ {system("path1["NR - 1"]="$1)}'
awk '{gsub(/#.*/, "")} /[^\n].*/ {system("path2["NR - 1"]="$2)}'
Im Grunde genommen funktioniert es auch, aber die Variablen werden nicht exportiert, sodass ich diese im Script nich mehr weiterverwenden kann!

Gibt es eine Möglichkeit die Variablen auch im Script außerhalb der system()-Funktion (ein export innerhalb der Funktion hilft auch nicht) zu nutzen (über elegantere Lösungen freue ich mich natürlich noch mehr ;))?

Gruß -jm-

peschmae
03-09-2004, 18:11
statt


awk '{gsub(/#.*/, "")} /[^\n].*/ {system("path1["NR - 1"]="$1)}'

würde ich sowas versuchen:


peschmae@thinkpad:/tmp$ ARRAY=( $(awk '{gsub(/#.*/, "")} /[^\n].*/ { print $1 }' test.txt ) )
peschmae@thinkpad:/tmp$ echo ${ARRAY[0]}
/Path1_1
peschmae@thinkpad:/tmp$ echo ${ARRAY[1]}
/Path1_2
peschmae@thinkpad:/tmp$ echo ${ARRAY[2]}
/Path1_3



und schon hast du das Zeugs in einem Bash-Array.


Noch eine Vereinfachung für deine Kommentarbehandlung:


awk '/^[^#]/{ print $1 }'


Führt das print nur auf Zeilen aus, die nicht mit # beginnen. Falls da evtl. Leerzeichen davor sind natürlich entsprechend anpassen...
Die Kommentare rechts neben den Datensätzen sind ja egal sein.


MfG Peschmä

-jm-
03-09-2004, 19:17
Danke, es funktioniert wunderbar!


Noch eine Vereinfachung für deine Kommentarbehandlung:


awk '/^[^#]/{ print $1 }'


Führt das print nur auf Zeilen aus, die nicht mit # beginnen. Falls da evtl. Leerzeichen davor sind natürlich entsprechend anpassen...
Die Kommentare rechts neben den Datensätzen sind ja egal sein.

Stimmt!
Ich habe ursprünglich noch weitere Parameter für die Konfigurationsdatei geplant, aber mich letztendlich dafür entschieden, sie wegzulassen, daher noch die umständlichere Variante. Leerzeilen machen jetzt auch keine weiteren Probleme mehr.
Endgültige Version:

ARRAY=( `awk '/^[^#]/ { print $1 }' datei` )