zur Übersicht nächste Seite

doppelte Zeichenfolgen finden

Generell gilt bei den weißen Textstellen auf dieser Seite: Man fügt die Zeichenfolge aus dem weißen Feld bei dem blinkenden Cursor des Terminals ein - dann drückt man die Eingabetaste.
Wichtig ist auch daß der verwendete Texteditor die Eingaben Linux-codiert speichert. Bei gedit kann man mit dem Menupunkt 
Speichern unter
Einstellungen vornehmen und diese sollten so aussehen

Bei Windows-codierten txt-Dateien kann es zu Problemen kommen.

Hat man in einer Tabelle eine Spalte mit vielen Zahlen (der Übersicht wegen hier 30 Stück)

so kann man diese Zellen mit den Zahlen kopieren und mit einem Texteditor (z.B. gedit) in eine txt-Datei einfügen. Dieser gibt man z.B. den Namen
ttspalte.txt     im Ordner ~/
Diese txt-Datei kann man im Terminal öffnen mit
cat ~/ttspalte.txt
Man kann mit
cat ~/ttspalte.txt | sed 's| ||g' | sort | uniq
mögliche Leerzeichen entfernen, die Zahlen sortieren, doppelte Zahlen entfernen (dies funktioniert mit uniq nur wenn zuvor sortiert wurde).
Dies ist auch genauso möglich mit
sort ~/ttspalte.txt | sed 's| ||g' | uniq
Man kann diese bearbeiteten Zahlen im Terminal kopieren und in die Tabelle einfügen und hat damit alle doppelten Zahlen entfernt.

Man kann die Zahlen ausgeben lassen die doppelt (oder mehrfach) vorkommen
sort ~/ttspalte.txt | sed 's| ||g' | uniq -d
7036
7110
7455

Man kann die doppelten (oder mehrfachen) Zahlen mit der entsprechenden Mehrfach-Anzahl ausgeben lassen
sort ~/ttspalte.txt | sed 's| ||g' | uniq -D
7036
7036
7110
7110
7455
7455
7455

Man kann auszählen lassen wie oft die jeweiligen Zeichenfolgen vorkommen (es wird die Anzahl in einer Spalte davorgeschrieben)
sort ~/ttspalte.txt | sed 's| ||g' | uniq -c
Man kann alles wieder neu sortieren lassen
-r (umgekehrte Reihenfolge) -n (Sortierung nach den Zahlen der ersten Spalte)
sort ~/ttspalte.txt | sed 's| ||g' | uniq -c | sort -rn
3 7455
2 7110
2 7036
...

Damit hat man die Zahlen die am meisten vorkommen ganz oben. Man kann diese Anzahl-Sortierung bei den Lotto-Zahlen der letzten Wochen durchführen. Da statistisch jede Zahl die gleiche Wahrscheinlichkeit hat gezogen zu werden, kann man beim Tippen die Zahlen auswählen, die in den letzten Wochen am wenigsten vorgekommen sind.

Möchte man nach Zahlen der Spalte 2 sortieren so benutzt man
sort -r -n -k 2,2
sort -n -k 2,2
Bei einer Sortierung nach Zahlen der Spalte 3
sort -r -n -k 3,3
sort -n -k 3,3
Wenn man Spalten nach Buchstaben sortieren möchte so läßt man -n weg.

Hat man nun weitere Zahlen in einer Zeile vorliegen (z.B. aus einem e-mail-Programm)

7027, 7059, 7110, 7143, 7287, 7292, 7313, 7389, 7455, 7469, 7593, 7606, 7746, 7770, 7804, 7946, 7971, 7024 7479 7535 7772

so kann man diese Zahlen kopieren und mit einem Texteditor (z.B. gedit) in eine txt-Datei einfügen. Dieser gibt man z.B. den Namen
ttzeile.txt     im Ordner ~/
Diese Zahlen sollen nun senkrecht untereinander geschrieben und der Datei
~/ttspalte.txt
hinzugefügt werden
cat ~/ttzeile.txt | tr -s ' ' | sed 's| |\n|g' | sed 's|,||g' >> ~/ttspalte.txt
Zuerst werden mögliche mehrfach hintereinander vorkommende Leerzeichen auf ein Leerzeichen reduziert, dann wird ein Leerzeichen in einen Zeilenumbruch verwandelt, dann werden möglicherweise vorkommende Kommas gelöscht, und alles der Datei ~/ttspalte.txt hinzugefügt.

Dann kann man mit
sort ~/ttspalte.txt | sed 's| ||g' | uniq

wieder sortieren und doppelte Zahlen entfernen.
Das alles funktioniert auch mit Listen von e-mail-Adressen oder Worten ohne Leerzeichen.

Wenn die Zahlen ohne Leerzeichen in folgender Form vorliegen

7027,7059,7110,7143,7287,7292,7313,7389,7455,7469,7593,7606,7746,7770,

so kopiert man diese Zahlen in die Datei ~/ttzeile.txt und ändert das Komma in einen Zeilenumbruch und fügt alles der Datei ~/ttspalte.txt hinzu
cat ~/ttzeile.txt | sed 's|,|\n|g' >> ~/ttspalte.txt
Umgekehrt kann man eine Zahlen-Spalte in eine Zeile umschreiben mit:
cat ~/ttspalte.txt | sed 's|$|, |g' | tr -d '\n'
7027, 7059, 7110, 7143, 7287, 7292, 7313, 7389, 7455, 7469, 7593, 7606, 7746, 7770,

Und man kann auch doppelte Worte in einem Textabschnitt ausfindig machen, etwa im Text:

Das alles funktioniert auch mit mit Listen von   e-mail-Adressen   oder Worten ohne ohne Leerzeichen.

Man kopiert den Text-Absatz mit einem Texteditor (z.B. gedit) in eine txt-Datei. Dieser gibt man z.B. den Namen
ttabsatz.txt     im Ordner ~/
Dann schreibt man den Text in eine Zeile indem man die Zeilenumbrüche entfernt, dann werden mehrfache Leerzeichen zu einem Leerzeichen reduziert, dann werden Leerzeichen durch Zeilenumbrüche ersetzt (sortieren darf man natürlich nicht, denn der Sinn des Textes würde damit zerstört). Zunächst kann man untersuchen ob doppelte Worte vorhanden sind:
cat ~/ttabsatz.txt | tr -d '\n' | tr -s ' ' | sed 's| |\n|g' | uniq -D
mit
mit
ohne
ohne

Dann kann man doppelte Worte entfernen und um den Text-Absatz wieder in eine lesbare Zeile zu schreiben wird zuerst am Ende jedes Wortes (jeder Zeile, die nur aus einem Wort besteht) ein Leerzeichen angefügt, dann alles in eine Zeile geschrieben:
cat ~/ttabsatz.txt | tr -d '\n' | tr -s ' ' | sed 's| |\n|g' | uniq | sed 's|$| |g' | tr -d '\n'
Man kann den korrigierten Text im Terminal kopieren und in ein writer-Dokument einfügen oder den Ursprungstext ersetzen:

Oder den korrigierten Text in eine neue txt-Datei schreiben
cat ~/ttabsatz.txt | tr -d '\n' | tr -s ' ' | sed 's| |\n|g' | uniq | sed 's|$| |g' | tr -d '\n' > ~/ttabsatz-neu.txt

Hat man z.B. eine Namensliste (Worte mit Leerzeichen) so kann man die Leerzeichen ersetzen durch _

cat ~/ttnamen.txt | sed 's| |_|g' > ~/ttnamen_ohne_leerz.txt

Dann kann man doppelte Namen sehen mit
cat ~/ttnamen.txt | sed 's| |_|g' | sort | uniq -D | sed 's|_| |g'
Eva Maria Ppname
Eva Maria Ppname
Eva Rrname
Eva Rrname
Waltraud Ffname
Waltraud Ffname

Man kann doppelte Namen löschen. Und das letzte vorkommende Leerzeichen kann man in das Zeichen ; umwandeln:
cat ~/ttnamen.txt | sed 's| |_|g' | sort | uniq | sed 's|_| |g' | sed 's|\(.*\) |\1;|'
oder in eine Datei schreiben:
cat ~/ttnamen.txt | sed 's| |_|g' | sort | uniq | sed 's|_| |g' | sed 's|\(.*\) |\1;|' > ~/ttnamen_VN_NN.txt

Dann kann man diese Namen in eine Tabelle einfügen wobei 
Vornamen mit Leerzeichen und 
Vornamen ohne Leerzeichen 
in der gleichen Spalte erscheinen, sofern das Trennzeichen ; beim Import ausgewählt wird:

Man kann mit cut und Wahl des Trennzeichens ; auch einzelne Felder herausschneiden:
cat ~/ttnamen_VN_NN.txt | cut -d';' -f1
Adam
Ben
Eva Maria
Eva
Helmut
Herbert
Waltraud

oder in eine Datei schreiben:
cat ~/ttnamen_VN_NN.txt | cut -d';' -f1 > ~/ttnamen_VN.txt
Oder dem herausgeschnittenen Feld noch etwas hinzufügen:
cat ~/ttnamen_VN_NN.txt | cut -d';' -f2 | sed 's|$|:|g'
Eename:
Vvname:
Ppname:
Rrname:
Ddname:
Aaname:
Ffname:

oder in eine Datei schreiben:
cat ~/ttnamen_VN_NN.txt | cut -d';' -f2 | sed 's|$|:|g' > ~/ttnamen_NN.txt
Dann kann man diese beiden Spalten wieder zusammenkleben:
paste ~/ttnamen_NN.txt ~/ttnamen_VN.txt > ~/ttnamen_NN_VN.txt

Noch eine Anmerkung wie man bei einer Spalte doppelte Einträge in der Tabellenkalkulation entfernen kann. Angenommen es liegen in der Spalte A Einträge vor. Dann sortiert man diese Einträge. Anschließend schreibt man in die Zelle B1
=WENN(A1=A2;"";A1)
Dann fährt man mit der Maus auf das Quadrat unten rechts (bei der Markierung von B1) bis sich der Mauszeiger in ein Kreuz verwandelt. Dann macht man einen Doppelklick auf das Quadrat. Damit wird die Formel (entsprechend der jeweiligen Zeile) auf die ganze Spalte B erweitert, solange Werte in der Spalte A vorhanden sind. Kommt ein Eintrag doppelt vor so erscheint eine leere Zelle, ansonsten der Wert aus der A-Spalte. Jetzt sortiert man Spalte B, damit alle leeren Zellen nach unten rutschen. Die Spalte A mit den doppelten Zeichenfolgen kann man dann löschen.


zur Übersicht nächste Seite

Datenschutzerklärung
Impressum