Programm "innerhalb awk ausführen"

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
zahlhans
Beiträge: 56
Registriert: 06.02.2009 13:09:08

Programm "innerhalb awk ausführen"

Beitrag von zahlhans » 13.07.2009 13:59:00

Hi,

heute habe ich folgendes Problem: Gegeben wieder eine Textdatei der Form

Code: Alles auswählen

A#b
B#d
...
mit Feldtrennern #. Die erste Spalte soll nun durch ein anderes Script, etwa script.sh verändert werden. Im Grunde hätte ich gerne sowas:

Code: Alles auswählen

awk -F'#' '{print `script.sh $1`"#"$2}'
wobei das Konstrukt mit `script.sh $1` in awk ja nicht funktioniert.

Kann man das in awk (oder evtl. auch ganz anders) realisieren?

AopicieR
Beiträge: 81
Registriert: 05.02.2009 09:52:53

Re: Programm "innerhalb awk ausführen"

Beitrag von AopicieR » 14.07.2009 09:12:25

Hi,

wie es innerhalb awks gehen könnte, weiß ich nicht, aber Folgendes scheint mir zu funktionieren:

Code: Alles auswählen

#!/bin/bash
inputfile=/tmp/blah
scriptlocation=/tmp/script.sh

for i in $( cat $inputfile ) 
do
	firstpart=$(echo $i | awk -F'#' '{print $1}')
	secondpart=$(echo $i | awk -F'#' '{print $2}')
	modified=$($scriptlocation $firstpart)
	echo $modified"#"$secondpart
done
inputfile ist die Datei, die Du bearbeiten willst, scriptlocation der Pfad zu script.sh. Geht sicherlich auch anders viel besser, aber das ist alles, was ich mit meinen beschränkten Kenntissen zustande gebracht habe. Vielleicht hilft es ja.

Viele Grüße

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: Programm "innerhalb awk ausführen"

Beitrag von roli » 14.07.2009 10:10:28

Hi,

mein awk Manual sagt:
system(cmd-line) Execute the command cmd-line, and return the exit status. (This may not be available on non-POSIX systems.)
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

zahlhans
Beiträge: 56
Registriert: 06.02.2009 13:09:08

Re: Programm "innerhalb awk ausführen"

Beitrag von zahlhans » 14.07.2009 17:10:22

Hi,

das system(cmd-line) habe ich übersehen. Nun hatte ich aber das Problem in grün, weil ich im Systemkommando nicht an die awk-Variable $1 kam...

Ich habe es nun so ähnlich wie tantris gemacht, allerdings hat die for-Schleife meine Datei nicht zeilenweise ausgelesen. Das kann man sicher irgendwie definieren - ich habe es nun mit einer while-Schleife gelöst, was seinen Zweck erfüllt:

Code: Alles auswählen

while read i; do
...
done < "input.txt"

AopicieR
Beiträge: 81
Registriert: 05.02.2009 09:52:53

Re: Programm "innerhalb awk ausführen"

Beitrag von AopicieR » 15.07.2009 01:49:54

zahlhans hat geschrieben: Ich habe es nun so ähnlich wie tantris gemacht, allerdings hat die for-Schleife meine Datei nicht zeilenweise ausgelesen.
Stimmt. Meine Testdatei enthielt unglücklicherweise keine Leerzeichen, so dass es mir entgangen ist. Ein

Code: Alles auswählen

IFS=$'\n'
am Anfang des Skriptes behebt das. Aber jetzt hast Du es ja schon anders gelöst.

zahlhans
Beiträge: 56
Registriert: 06.02.2009 13:09:08

Re: Programm "innerhalb awk ausführen"

Beitrag von zahlhans » 15.07.2009 13:41:00

Mein Fehler ... aus der Beschreibung konnte man ja nicht herauslesen, daß Leerzeichen enthalten sind. Trotzdem gut zu wissen, wie man das ändert. Danke für den Tip.

Antworten