Strings verarbeiten mit "distinct"

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
sergej2018
Beiträge: 82
Registriert: 19.09.2017 21:35:18

Strings verarbeiten mit "distinct"

Beitrag von sergej2018 » 03.07.2018 09:43:54

Hallo, ich habe hier ein Script, das mir in eine Log-Datei komplette Pfade zu Dateien schreibt.
Eigentlich interessiert mich aber nur der übergeordnete Ordner und der auch nur "distinct" (wer's von SQL kennt), also nur einmal.
Die Pfade können aber unterschiedlich lang sein, das hard zu coden geht also nicht.
z.B:

Code: Alles auswählen

/pfad/zu/datei1
/pfad/zu/datei2
/pfad/zu/datei3
/noch/ne/datei4
/noch/ne/datei5
/mal/was/längeres/datei6
Daraus möchte ich eigentlich nur haben:

Code: Alles auswählen

/pfad/zu
/noch/ne
/mal/was/längeres
Wie bewerkstellige ich das?

Benutzeravatar
Meillo
Moderator
Beiträge: 5020
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Strings verarbeiten mit "distinct"

Beitrag von Meillo » 03.07.2018 11:33:36

Code: Alles auswählen

sed 's,/[^/]*$,,' | sort -u
Use ed(1) once in a while!

rendegast
Beiträge: 14844
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Strings verarbeiten mit "distinct"

Beitrag von rendegast » 03.07.2018 13:18:35

Meillo hat geschrieben: sed ...
Das wäre für die Weiterverarbeitung,
es geht wohl eher um die Erzeugung.



Vielleicht sowas

Code: Alles auswählen

LOGf="/pfad/test.log"
[ -f "$LOGf" ] || touch "$LOGf"

ENTRY="$1"
[ "x$(echo "$ENTRY" | cut -c 1)" = "x/" ] || { echo "kein (absoluter) Pfad, Beende"; exit 0; }

[ -d "$(readlink -f "$ENTRY")" ] && ENTR="${ENTRY}/."
ENTRYd="$(dirname "$ENTRY")"

fgrep -q -x -m1 "$ENTRYd" "$LOGf" || echo "$ENTRYd" >> "$LOGf"
Mit 'dirname' wird der Pfad des übergebenen Arguments verwendet.
Ist das Argument ein (existieredes) Verzeichnis (oder Link darauf), so verwende das Argument als Pfadeintrag.
In der letzten Zeile gibt es einen neuen Eintrag nur, wenn noch kein solcher vorhanden ist.
Zuletzt geändert von rendegast am 03.07.2018 15:42:04, insgesamt 5-mal geändert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Meillo
Moderator
Beiträge: 5020
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Strings verarbeiten mit "distinct"

Beitrag von Meillo » 03.07.2018 13:53:20

rendegast hat geschrieben: ↑ zum Beitrag ↑
03.07.2018 13:18:35
es geht wohl eher um die Erzeugung.
Ja, in dem Fall eher so wie du vorschlaegst.
Use ed(1) once in a while!

sergej2018
Beiträge: 82
Registriert: 19.09.2017 21:35:18

Re: Strings verarbeiten mit "distinct"

Beitrag von sergej2018 » 03.07.2018 16:04:14

Danke euch beiden :-)
Es dürfte beides funktionieren, denn wie gesagt: das unverarbeitete - viel zu große - Logfile gibts schon ;-)

Antworten