[gelöst] Frage zu awk und sed

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

[gelöst] Frage zu awk und sed

Beitrag von Duff » 19.09.2008 16:30:00

Hallo,

habe mal eine Frage zu sed und awk.

Ich habe folgenden Skript-Anfang:

Code: Alles auswählen

#!/bin/bash

FILE="/root/scripts/ALARMING.txt"
RECEIVERS=$(cat $FILE|awk '$1 ~ /^1/ {print $2}')

echo $RECEIVERS|sed -e 's/ /,/g'
Die Datei zum Auslesen ist so aufgebaut:

Code: Alles auswählen

1 user1@mail.de # Mail versenden
1 user2@mail.de
0 user3@mail.de
1 user4@mail.de # Keine Mail versenden
Ergebnis:

Code: Alles auswählen

user1@mail1.de,user2@mail2.de,usw.
Wie kann ich den sed-Befehl nicht noch hinter den awk-Befehl hängen bzw. warum bekomme ich dann nicht das gewünschte Resultat zurück geliefert???
Zuletzt geändert von Duff am 19.09.2008 17:42:51, insgesamt 1-mal geändert.
Oh, yeah!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zu awk und sed

Beitrag von gms » 19.09.2008 17:28:24

Duff hat geschrieben: Wie kann ich den sed-Befehl nicht noch hinter den awk-Befehl hängen bzw. warum bekomme ich dann nicht das gewünschte Resultat zurück geliefert???
vom deinem awk-Befehl bekommst du ein mehrzeiliges Ergebnis ohne Blankzeichen dazwischen, wenn du danach die ( nicht vorhandenen ) Leerzeichen mit sed ersetzen möchtest, führt dieses Kommando auch keine Ersetzungen durch.
wenn du aber vorher das mehrzeilige Ergebnis mittels echo in eine einzeilige Ausgabe ( mit Leerzeichen dazwischen ) umwandelst, funktioniert auch der sed Befehl.

Übrigens, immer wenn du mit awk UND sed herumwurschtelst, kannst du davon ausgehen, daß du das gewünschte Ziel auch mit awk ODER sed erreichen kannst.

Gruß
gms

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Frage zu awk und sed

Beitrag von Duff » 19.09.2008 17:42:20

Ok, danke.

Habe ich natürlich gar nicht so überprüft, wie die Ausgabe von awk aussieht und das diese mehrzeilig war.

Habe es nun so gelöst:

Code: Alles auswählen

...
RECEIVERS=$(cat $FILE|awk 'BEGIN {ORS=","} $1 ~ /^1/ {print $2}'|sed -ne 's/^\(.*\),$/\1/p')
...
Oh, yeah!

Antworten