Hallo Chris,
hier mein neuer Lösungsansatz:
Als erstes habe ich die Datei, in der die Sets und Tabs stehen etwas verändert:
tab1,
tab2,
tab3
tab1,
tab5,
tab6,
tab10,
tab25
tab3,
tab5,
tab6,
tab9
einfach nur, weil die eckigen Klammern in awk eine spezielle Bedeutung haben und es so einfacher mit der Parameterübergabe funktioniert. Du kannst statt auch nur setX nehmen oder +setX+, was auch immer, aber [setX] war gerade sehr ungünstig. Ich hoffe, das ist machbar.
Jetzt das modifizierte Shell-Skript:
#!/bin/bash
awk -v anf=$1 'BEGIN { RS=""
}
{ if ($0~anf) for (i = 2; i
wenn Du das z.B. set nennst, ausführbar machst (chmod +x) kannst Du das mit
./set ""
oder gleich mit
variable=`./set ""`
aufrufen:
kb@etch:~/work/set$ variable=`./set ""`
kb@etch:~/work/set$ echo $variable
tab1, tab2, tab3
Das ist natürlich ohne Fehlerüberprüfung und die tabs sind hier in einer Datei namens setfile.txt abgespeichert.
Eventuell noch shebang #! anpassen und das Skript verfeinern...
Die Parameterübergabe bei awk funktioniert mit -v parameter=wert, so könnte man z.B. auch den Filenamen mit den tabs übergeben. Ich habe alles in ein bashskript gepackt, du kannst das auch auseinandernehmen, wie es di besser gefällt.
Der Syntaxfehler kam wahrscheinlich davon, daß ich zwischen { und print kein Leerzeichen gelassen habe, das war bei früheren Versionen von awk Pflicht. Ich hoffe, daß dies die Ursache war. Was ich sonst noch geändert habe, erschliesst sich dir hoffentlich von selbst, so war z.B. mein erster Ansatz mit /begin/,/end/ überflüssig, weil das schon durch RS="" erledigt wird, daß awk alles bis zu einer Leerzeile in sein internes Array einliest.
Viele Grüße
Marvin