PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dateiinhalte sortieren...



rainer11
22.11.06, 12:59
und noch ein Problem - vielleicht kann mir jemand dabei helfen:

ich habe zwei Textdateien mit Benutzernamen:

Datei 1: Huber
Müller
meier
Schmitt
Datei 2: aschmitt
fhuber
gmeier
rmueller
Ziel soll nun sein, diese beiden Dateien in einer zusammenzufassen die die Form hat:

Datei 3: aschmitt Schmitt
fhuber Huber
gmeier meier
rmueller Müller

Das Problem hiebei ist, dass ich aufgrund der unterschiedlichen Schreibweisen Datei 1 und Datei 2 nicht einfach zeilenweise auslesen kann sonst wird aus Huber ein aschmitt. Es müsste also möglich sein, mittels der größtmöglichen Ähnlichkeit die Namen einander zuzuordnen; und das mit bash-Bordmitteln.
Kann mir da jemand helfen? Wäre echt prima!
Rainer

marce
22.11.06, 13:16
mal so aus dem Kopf heraus ohne Test - und mit ein bisserl Pseudocode


for i in $(more <datei2> | sort)
do
echo -n $i >> <ergebnisdatei>
grep $i <datei1> >> <ergebnisdatei>
done


... geht sicherlich noch einfacher...


(ach ja - bei dem grep sollte noch sowas in der Art dazu wie "ignoriere die Groß-Klein-Schreibung" - die Option gibt's, kenne nur das Flag nicht aus dem Kopf...)

suck
22.11.06, 13:17
Stimmen folgende Behauptungen:

1) In Datei 2 gibt es keine Umlaute
2) In Datei 1 gibt es kein "ue", "ae" und "oe"
3) Von den Umlauten, der Sortierung und der Gross/Kleinschreibung abgesehen, steht in Datei 2 das selbe wie in Datei 1, nur das vor dem Namen immer exakt ein weitere Buchstabe steht

rainer11
22.11.06, 13:37
grep -i

1.) und 2.) sind ok - aber 3.) nicht! stimmt hab ich nicht aufgepasst beim posting. Es kann auch sein: Schuster ajschuster
sorry.
Rainer

rainer11
22.11.06, 14:17
@marce Ist ein Ansatz, aber die bash kann die Variable nicht auflösen.

marce
22.11.06, 16:49
welche?

... und was ist die genaue Fehlermeldung?

tschloss
22.11.06, 17:50
Erst mal überlegen, ob es überhaupt einen sinnvollen Algorithmus gibt.
Dann Implementierungsuafwand abschätzen (warum muss das originär bash sein? mit Perl zB hast du wesentlich mehr Möglichkeiten)
Und schließlich gegen eine manuelle Lösung via Tabellenkakulation vergleichen.

suck
22.11.06, 17:58
Ein Algorithmus würde mir schon einfallen. Wahrscheinlich würde ich (bash + (awk oder sed)) nutzen.

Ein paar Fragen noch:

1) Kann in der einen Datei "ajschuster" und "bschuster" stehen, während in der anderen 2 mal "Schuster" auftaucht?
2) Von wie vielen Zeilen sprechen wir?
3) Ist das ein wirkliches Problem oder eine Art Hausaufgabe/Übung?

tschloss
22.11.06, 18:07
1) Kann in der einen Datei "ajschuster" und "bschuster" stehen, während in der anderen 2 mal "Schuster" auftaucht?

Wenn das viele sind, wird es hinreichend viele Abweichungen geben, um die man sich am Ende wieder manuell kümmern muss (oder den Alg mehrfach verfeinert).


2) Von wie vielen Zeilen sprechen wir?
Das ist die Kardinalfrage. 200 Stück einmal -> manuell, 10.000 täglich -> Progrämmchen.

3. Kann die Quelle nicht noch den Vornamen liefern, dann hat man es bei dem ersten / ersten zwei Buchstaben leichter.

4. Sind denn die Namen aus Datei 1 nach 8 Zeichen abgeschnitten? (Und wie wurden Doubletten enflochten? "rmuelle1" vielleicht ;)

suck
22.11.06, 18:35
Wenn das viele sind, wird es hinreichend viele Abweichungen geben, um die man sich am Ende wieder manuell kümmern muss (oder den Alg mehrfach verfeinert).Nicht zwingend! Ich würde aus der Datei mit den Nachnamen eine Zeile nach der anderen auslesen und dann die erste passende Zeile der anderen Datei diesem Wert zuordnen. Anschliessend würde ich die schon verwerteten Zeilen jeder Datei aus diesen Dateien löschen. So sollte es egal sein, wie viele Schulzes es gibt.

fs111
22.11.06, 22:07
mal so aus dem Kopf heraus ohne Test - und mit ein bisserl Pseudocode


for i in $(more <datei2> | sort)
do
echo -n $i >> <ergebnisdatei>
grep $i <datei1> >> <ergebnisdatei>
done


... geht sicherlich noch einfacher...


Wozu brauchst Du da more?? sort kann Dateien direkt sortieren, wie fast alle text-utils...

fs111

marce
22.11.06, 23:38
damit sich das more nicht so unnütz vorkommt :-)

Ansonsten nehme ich die "useless use of "-Award-Nominierung gerne an.