[ERLEDIGT] Shell-Skript: Spaltenbasierte Datei parsen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
zongo
Beiträge: 117
Registriert: 09.04.2007 23:53:46

[ERLEDIGT] Shell-Skript: Spaltenbasierte Datei parsen

Beitrag von zongo » 07.02.2012 14:25:45

Hallo zusammen!

Ich habe ein kleines Problem, welches mir so in der Art bisher noch nicht untergekommen ist.

Ich möchte mit einem Shell-Skript (bash 3.2.xx) eine SPALTENBASIERTE Datei mit festen Feldpositionen parsen.

Beispielzeile:

Code: Alles auswählen

"aaaa        bb           dddd        2353           46754       dgezdr       sfsdf  fggdf"


Die Informationen in dieser Zeile werden in feste Positionen geschrieben und dazwischen wird mit Leerzeichen gefüllt. Wenn ich jetzt eine einfache Schleife mit

cat FILE | while read x; do .....

um die Datei legen will sind in $x die Leerzeichen gerafft, d.h. doppelte Leerzeichen werden gelöscht und die o,.g. Beispielzeile steht dann so in $x: "aaaa bb dddd 2353 46754 dgezdr sfsdf fggdf". Zum parsen ist dieser String dadurch nutzlos weil ich die Positionsparameter nicht mehr auflösen kann(und in der Zeile auch nicht immer alle Felder befüllt sind).

Hat jemand eine Idee, wie ich mit einem Shell-Skript am besten eine solche Datei am besten parsen kann oder warum die Leerzeichen bei o.g. Methode gerafft werden?

Für sachdienliche Hinweise wäre ich dankbar!

Beste Grüße aus Braunschweig!
Zuletzt geändert von zongo am 13.02.2012 11:15:37, insgesamt 1-mal geändert.

Benutzeravatar
chabayo
Beiträge: 930
Registriert: 17.08.2005 07:44:33
Lizenz eigener Beiträge: Artistic Lizenz

Re: Shell-Skript: Spaltenbasierte Datei parsen

Beitrag von chabayo » 07.02.2012 14:45:47

Aye!

'cut' wuerde das schon tun, wenn du den Delimiter mit '-d\ ', Semikolon bloss wegen der Darstellung, oder doch mit Semikolon "-d' '", nun aber Anfuerhungszeichen wegen der Darstellung, setzt.

Vielleicht koenntest du mit sed die Leerzeichen umwandeln bevor sie der read-Prozess bekommt, oder vlt. mit dem tr-Befehl!?
Watt about the non-digital!?

Benutzeravatar
zongo
Beiträge: 117
Registriert: 09.04.2007 23:53:46

Re: Shell-Skript: Spaltenbasierte Datei parsen

Beitrag von zongo » 07.02.2012 14:55:31

In der gesamten Datei VORHER alle Leerzeichen mit _ o.ä. zu ersetzen wäre eine Möglichkeit, wenn auch eine sehr unelegante.

"cut -b ...." wäre bei mir in der Art und Weise wie ich eigentlich vor hatte der nächste Schritt gewesen, da ich bestimmte Informationen mit cut -b 20-43, 51-58 ausgeschnitten hätte, aber da die festen Positionen ja nicht mehr gelten, kann cut auch nicht greifen ...

yeti

Re: Shell-Skript: Spaltenbasierte Datei parsen

Beitrag von yeti » 07.02.2012 16:07:06

Code: Alles auswählen

(yeti@destiny:1)~$ IFS='' echo 'aaaa        bb           dddd        2353           46754       dgezdr       sfsdf  fggdf' | while read ; do echo "$REPLY" ; echo "${REPLY:25:4}" ; done
aaaa        bb           dddd        2353           46754       dgezdr       sfsdf  fggdf
dddd
...aber sowas ist eigentlich eher 'n Job für cut oder im komplexeren Fall für awk...

Benutzeravatar
zongo
Beiträge: 117
Registriert: 09.04.2007 23:53:46

Re: [ERLEDIGT] Shell-Skript: Spaltenbasierte Datei parsen

Beitrag von zongo » 13.02.2012 11:22:43

Mannomann ..... ich habe den ältesten und wahrscheinlich häufigsten begangenen Shell-(Skript)-Fehler gemacht!

cat XXX | cut .... STATT cut XXX | while read ...

Ich habe zuerst die Datei mit "cat" ausgegeben und dann weiterverarbeitet, mit den oben beschrieben Folgen. Stattdessen hätte ich einfach mal gleich "cut" nehmen sollen.

Naja, wieder eine Kerbe mehr auf dem Konto der gelebten Erfahrung :wink:

Benutzeravatar
chabayo
Beiträge: 930
Registriert: 17.08.2005 07:44:33
Lizenz eigener Beiträge: Artistic Lizenz

Re: [ERLEDIGT] Shell-Skript: Spaltenbasierte Datei parsen

Beitrag von chabayo » 21.02.2012 09:20:15

Glaub so lange gibts CLI's noch gar nicht so alt wie DER Fehler schon ist...
Watt about the non-digital!?

Antworten