
93578
28.06.2016, aktualisiert um 19:03:14 Uhr
Vor- und Nachnamen mit einem bestimmten Muster aus einer Textdatei löschen
Ok. Meine letzte Frage war ein bisschen undeutlich formuliert. Also hier ist ein neuer Versuch.
Ich habe drei Text-Dateien:
Datei 1 - eine Liste mit 30.000.000.000 Zeilen. In dieser Datei befinden sich teilweise einzelne Zeilen mit Vor- und Nachnamen von Mitarbeitern. Ich soll nun NUR diese Zeilen bereinigen/löschen und zwar NUR die, die folgenden acht Kriterien entsprechen:
Alle Zeilen, die NUR Vorname ODER NUR Nachname enthalten, sollen bleiben:
Ich habe nun 2 zusätzliche Textdateien generiert: "Vorname.txt" mit allen möglichen Vornamen und "Nachname.txt" - mit Nachnamen. Wie kann ich diese Dateien mit der ersten Datei abgleichen und alle Zeilen mit den oben genannten Muster löschen? Oder existiert eine einfachere Lösung?
Danke.
Takeshi
Ich habe drei Text-Dateien:
Datei 1 - eine Liste mit 30.000.000.000 Zeilen. In dieser Datei befinden sich teilweise einzelne Zeilen mit Vor- und Nachnamen von Mitarbeitern. Ich soll nun NUR diese Zeilen bereinigen/löschen und zwar NUR die, die folgenden acht Kriterien entsprechen:
Name Vorname
Name_Vorname
Name.Vorname
Name-Vorname
Vorname Name
Vorname_Name
Vorname.Name
Vorname-Name
Alle Zeilen, die NUR Vorname ODER NUR Nachname enthalten, sollen bleiben:
Vorname
Nachname
Ich habe nun 2 zusätzliche Textdateien generiert: "Vorname.txt" mit allen möglichen Vornamen und "Nachname.txt" - mit Nachnamen. Wie kann ich diese Dateien mit der ersten Datei abgleichen und alle Zeilen mit den oben genannten Muster löschen? Oder existiert eine einfachere Lösung?
Danke.
Takeshi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 308396
Url: https://administrator.de/forum/vor-und-nachnamen-mit-einem-bestimmten-muster-aus-einer-textdatei-loeschen-308396.html
Ausgedruckt am: 22.04.2025 um 06:04 Uhr
15 Kommentare
Neuester Kommentar

This is my understanding right now:
Regards
#!/bin/bash
FILE_VORNAMEN="./Vorname.txt"
FILE_NACHNAMEN="./Nachname.txt"
FILE_DATA="./big_file.txt"
FILE_DATA_CLEAN="./big_file_clean.txt"
# --------------------
NUMROWS=$(cat "$FILE_VORNAMEN" | wc -l)
REPLACE=''
for l in $(seq 1 $NUMROWS) ;do
vorname=$(sed "${l}!d" "$FILE_VORNAMEN")
nachname=$(sed "${l}!d" "$FILE_NACHNAMEN")
for t in ' ' _ . - ;do
REPLACE="$REPLACE|$nachname$t$vorname|$vorname$t$nachname"
done
done
REPLACE="${REPLACE:1}"
sed -re "/$REPLACE/Id" "$FILE_DATA" >"$FILE_DATA_CLEAN"
Hallo Takeshi,
wie stellts du sicher, dass in der Liste keine Doppel-Vor- oder Nachnamen enthalten sind?
Denn mit highloads Script würdest du die Zeilen löschen, die zwar nur den Vornamen (oder Nachnamen) enthalten, aber dennoch einen Bindestrich beinhalten; z.B. Lisa-Marie oder Meier-Müller
Gruß
em-pie
wie stellts du sicher, dass in der Liste keine Doppel-Vor- oder Nachnamen enthalten sind?
Denn mit highloads Script würdest du die Zeilen löschen, die zwar nur den Vornamen (oder Nachnamen) enthalten, aber dennoch einen Bindestrich beinhalten; z.B. Lisa-Marie oder Meier-Müller
Gruß
em-pie
Hallo @93578,
Ich habe das "Gelöst" vom Beitrag wieder entfernt, du schriebst du willst das morgen mal testen, also gehe ich davon aus, dein Problem ist noch nicht gelöst
Die Markierung bei @129813 lasse ich stehen, den anderen Thread mache ich nachher zu und Verweise auf diesen hier, normalerweise sind Doppelposts nicht so gerne gesehen
LG,
tomolpi
Ich habe das "Gelöst" vom Beitrag wieder entfernt, du schriebst du willst das morgen mal testen, also gehe ich davon aus, dein Problem ist noch nicht gelöst
Die Markierung bei @129813 lasse ich stehen, den anderen Thread mache ich nachher zu und Verweise auf diesen hier, normalerweise sind Doppelposts nicht so gerne gesehen
LG,
tomolpi

Zitat von @93578:
Dein Script funktioniert nicht. Es wird keine big_file-clean.txt-Datei erstellt. ???
Sure it works, i testet it in a ubuntu vm...!Dein Script funktioniert nicht. Es wird keine big_file-clean.txt-Datei erstellt. ???

First: My script above is case sensitive!, but you can change this easily with the option I of sed (Line17).
I have updated the script above for you, now it is case insensitive ...
Second First and Lastname text files must have the same number of lines in the above script. For each first name must exist a lastname in the same line.
You said nothing about all combinations of first- and lastnames !! If this is your intention take this script:
Please, next time be more precise with your description, thank you.
If you need more tweaking of the script, you can contact me, but this won't be free of charge.
Regards
I have updated the script above for you, now it is case insensitive ...
Second First and Lastname text files must have the same number of lines in the above script. For each first name must exist a lastname in the same line.
You said nothing about all combinations of first- and lastnames !! If this is your intention take this script:
#!/bin/bash
FILE_VORNAMEN="./Vorname.txt"
FILE_NACHNAMEN="./Nachname.txt"
FILE_DATA="./big_file.txt"
FILE_DATA_CLEAN="./big_file_clean.txt"
# --------
REPLACE=''
while read vorname ;do
while read nachname ; do
for t in ' ' _ '\.' - ;do
REPLACE="$REPLACE|$nachname$t$vorname|$vorname$t$nachname"
done
done < <(cat "$FILE_NACHNAMEN")
done < <(cat "$FILE_VORNAMEN")
REPLACE="${REPLACE:1}"
sed -re "/$REPLACE/Id" "$FILE_DATA" >"$FILE_DATA_CLEAN"
If you need more tweaking of the script, you can contact me, but this won't be free of charge.
Regards

Kannst Du es mit meinen txt-Dateien reproduzieren?
Absolutely no, I tested it exactly with your posted data after i wrote the second script and the result is what you expect, sorry it works!Ivanow&Max
Max@Updike
PS: Sorry, Linux ist nicht meine Welt
Go and learn ...Everyone has started one time.Windows is making the people stupid.
und Windows kann mit solchen riesigen Dateien nicht umgehen bzw. es wird ewig dauern...
That's bullshit, sorry.So, have a nice time learning the bash
Regards
highload

I can show you a video that it works, if you want...

demo.mp4
bin fast 55 Jahre alt. Es ist ein bisschen spät zum Lernen.
it's never too late. My father is 65, has worked for many years and now makes another apprentice because now he has the required time for it. Life is learning until death!