1 Übung: Inhalt von 2 Dateien in einer Datei tabellenförmig zusammenfassen - mkappus1/DatenmanagementMTHS24 GitHub Wiki

Übung: Inhalt von 2 Dateien in einer Datei tabellenförmig zusammenfassen

Die Dateien Wortliste-de.txt und Wortliste.en.txt enthalten je eine Wortliste in den Sprachen Deutsch und Englisch. Die Wortlisten umfassen jeweils 20 Zeilen und manche Begriffe kommen mehrfach vor.

Ihre Aufgabe ist es, aus diesen Wortlisten eine zweisprachige Wortliste in einem tabellen-artigen Format (Tabulator getrennt) in der Sprachrichtung Deutsch --> Englisch) zu erstellen.

Hund --> dog
Katze --> cat
Maus --> mouse

Dabei soll die Liste alphabetisch nach den deutschen Begriffe sortiert werden, es sollen Duplikate entfernt werden und optional soll die Liste am Schluss in eine zufällige Reihenfolge gemischt werden. Dazu benötigen Sie die UNIX Befehle, paste, sort uniq und shuf, die Sie sinnvoll verketten sollten.

Ihre Das Ergebnis sollte so aussehen - die Reihenfolge der Begriffe kann abweichen, wenn zufällig gemischt wurde:

WortlisteErgebnis

Abzugeben sind die fertige Datei, sowie ein Screenshot des Terminals, der die durchgeführten Schritte zeigt (gerne auch mit Fehlversuchen). Im folgenden finden Sie Erläuterungen zu den benötigten Befehlen. Die gleiche Vorgehensweise kann dann für die Vorbereitung grösserer Korpora verwendet werden, wie im Abschnitt Grundlegende Korpusvorbereitung mit Unix Befehlen besprochen.

Was macht der Befehl paste?

Der Befehl paste in Unix wird verwendet, um die Zeilen von zwei oder mehr Dateien zeilenweise zu verbinden. Er fügt die Inhalte der Dateien nebeneinander, getrennt durch ein Tabulatorzeichen (Standardtrennzeichen), zusammen.

Die grundlegende Syntax des paste Befehls lautet:

paste [Optionen] [Datei1] [Datei2] ...

  • Optionen: Zusätzliche Parameter, die das Verhalten des Befehls beeinflussen.
  • Datei1, Datei2, ...: Die Dateien, deren Zeilen zeilenweise zusammengeführt werden sollen.

Verwenden eines anderen Trennzeichens:

Sie können ein anderes Trennzeichen als das Standard-Tabulatorzeichen verwenden. Zum Beispiel, um ein Komma als Trennzeichen zu verwenden, nutzt man die Option -d:

paste -d ',' datei1.txt datei2.txt

Dies gibt die Zeilen von datei1.txt und datei2.txt nebeneinander, getrennt durch Kommas, aus.

Zusammenfügen mehrerer Dateien:

Sie können auch mehr als zwei Dateien zusammenfügen. Zum Beispiel:

paste datei1.txt datei2.txt datei3.txt

Dies gibt die Zeilen von datei1.txt, datei2.txt und datei3.txt nebeneinander, getrennt durch Tabulatoren, aus.

Der paste Befehl ist sehr nützlich, um die Inhalte mehrerer Dateien zeilenweise nebeneinander anzuordnen. Standardmässig verwendet er Tabulatoren als Trennzeichen, aber man kann auch andere Trennzeichen verwenden. Dies ist besonders praktisch, wenn Sie Daten aus verschiedenen Dateien zusammenfügen und vergleichen oder in ein anderes Format überführen möchten.

Was macht der Befehl sort?

Der Befehl sort in UNIX wird verwendet, um die Zeilen einer Textdatei oder die Eingaben von der Standardausgabe zu sortieren. Hier sind die Hauptfunktionen und Anwendungsfälle des sort Befehls:

sort [Optionen] [Datei]

Datei: Die Datei, deren Zeilen sortiert werden sollen. Wenn keine Datei angegeben wird, liest sort von der Standardeingabe.

Grundlegende Verwendung

Die grundlegende Syntax des sort Befehls lautet:

sort [Optionen] [Datei]

Datei: Die Datei, deren Zeilen sortiert werden sollen. Wenn keine Datei angegeben wird, liest sort von der Standardeingabe.

Beispiel

Angenommen, Sie haben eine Datei unsorted.txt mit folgendem Inhalt:

Banane
Apfel
Dattel
Apfel
Erdbeere

Wenn Sie den Befehl sort unsorted.txt ausführen, erhalten Sie:

Apfel
Apfel
Banane
Dattel
Erdbeere

Numerische Sortierung: Sortiere numerische Werte anstelle von Zeichenfolgen.

sort -n datei.txt

Rückwärts sortieren: Sortiere in absteigender Reihenfolge.

sort -r datei.txt

Sortieren nach einer bestimmten Spalte: Sortiere nach einer bestimmten Spalte in einer Datei.

sort -k 2 datei.txt

Einzigartige Zeilen: Sortiere und entferne doppelte Zeilen.

sort -u datei.txt (siehe auch Befehl uniqgleich hier unten)

Was macht der Befhle uniq?

Der UNIX Befehl uniq wird verwendet, um doppelte aufeinanderfolgende Zeilen in einer Datei oder einer Eingabe zu entfernen. Der Befehl kann auch verwendet werden, um nur doppelte oder nur eindeutige Zeilen anzuzeigen. Es ist wichtig zu beachten, dass uniq nur aufeinanderfolgende doppelte Zeilen entfernt oder bearbeitet, daher wird er oft zusammen mit dem Befehl sort verwendet, um die Daten zuerst zu sortieren und so alle doppelten Zeilen nebeneinander zu platzieren.

uniq [Optionen] [Eingabedatei] [Ausgabedatei]

  • Optionen: Zusätzliche Parameter, die das Verhalten des Befehls beeinflussen.

  • Eingabedatei: Die Datei, deren Zeilen überprüft und bearbeitet werden sollen.

  • Ausgabedatei: Optional, die Datei, in die die Ergebnisse geschrieben werden sollen. Wenn keine Ausgabedatei angegeben wird, werden die Ergebnisse auf der Standardausgabe (normalerweise der Bildschirm) angezeigt.

  • Zeilen zählen: Um die Anzahl der Vorkommen jeder Zeile anzuzeigen, verwendest du die Option -c

  • Nur doppelte Zeilen anzeigen: Um nur die doppelten Zeilen anzuzeigen, verwendest du die Option -d

  • Nur eindeutige Zeilen anzeigen: Um nur die eindeutigen Zeilen (die nur einmal vorkommen) anzuzeigen, verwendest du die Option `-u

Häufige Kombinationen

Da uniq nur aufeinanderfolgende doppelte Zeilen entfernt, wird er häufig zusammen mit sort verwendet, um die Daten zuerst zu sortieren:

sort file.txt | uniq

Zusammenfassung

Der uniq Befehl ist ein nützliches Werkzeug zur Verarbeitung von Textdateien, um doppelte aufeinanderfolgende Zeilen zu entfernen oder zu bearbeiten. Mit verschiedenen Optionen kann er doppelte Zeilen zählen, nur doppelte oder nur eindeutige Zeilen anzeigen. Er arbeitet am besten, wenn die Eingabedatei zuerst sortiert wird, um alle doppelten Zeilen nebeneinander zu platzieren.

Und was macht der Befehl shuf?

Der Befehl shuf in UNIX wird verwendet, um die Zeilen einer Datei oder einer Liste von Eingaben zufällig zu mischen. Es ist ein nützliches Werkzeug, um Daten in zufälliger Reihenfolge anzuzeigen oder zu verarbeiten.

shuf [Optionen] [Datei]

  • Optionen: Zusätzliche Parameter, die das Verhalten des Befehls beeinflussen.
  • Datei: Der Name der Datei, deren Zeilen gemischt werden sollen. Wenn keine Datei angegeben wird, liest shuf von der Standardeingabe (meistens die Tastatur oder eine vorherige Ausgabe eines anderen Befehls).

Beispiele

Einfaches Mischen einer Datei:

Wenn Sie eine Datei namens datei.txt haben und deren Zeilen zufällig mischen möchten, können Sie folgenden Befehl verwenden:

shuf datei.txt

Dies gibt den Inhalt von datei.txt in zufälliger Reihenfolge aus.

Erzeugen einer zufälligen Zahlenreihe:

Wenn Sie eine Liste von Zahlen zufällig anordnen möchten, können Sie shuf mit der Option -i verwenden, um einen Bereich anzugeben:

shuf -i 1-10

Dies gibt die Zahlen von 1 bis 10 in zufälliger Reihenfolge aus.

Anzahl der Ausgaben beschränken:

Um nur eine bestimmte Anzahl zufälliger Zeilen auszugeben, können Sie die Option -n verwenden:

shuf -n 3 datei.txt

Dies gibt 3 zufällig ausgewählte Zeilen aus datei.txt aus.

Zusammenfassung

Der shuf Befehl ist sehr vielseitig und kann verwendet werden, um Zeilen in einer Datei zu mischen, eine Liste von Zahlen zufällig anzuordnen oder eine begrenzte Anzahl zufälliger Zeilen auszugeben. Er ist besonders nützlich für Aufgaben wie das Zufallssortieren von Daten oder das zufällige Auswählen von Elementen.


Mehrere Befehle zusammenfassen mit der pipe |

Im Prinzip könne die oben beschriebenen Schritte (Zusammenführen (paste), Sortieren sort), Duplikate löschen (uniq) und zufällig mischen (shuf) in einzelnen Schritten einzeln mit je einem neuen Befehl ausgeführt werden

paste Datei1.txt Datei2.txt > DateiTabelle.txt

sort DateiTabelle.txt > DateiTabellerSortiert.txt

uniq DateiTabelleSoriert.txt > DateiTabelleSortiertKeineDubletten.txt

shuf DateiTabelleSortiertKeineDubletten > DateiTabelleSortiertKeineDublettenZufall,txt

Dabei wird jedesmal die neu-entstandene Datei mit dem nächste Befehl weiterbearbeitet.

Das Zeichen **>** in UNIX-Befehlen wird als Ausgabenumleitung oder Output Redirection bezeichnet. Es wird verwendet, um die Ausgabe eines Befehls in eine Datei umzuleiten, anstatt sie auf dem Bildschirm anzuzeigen. Hier sind die Hauptpunkte zur Bedeutung und Verwendung von >

sort unsortierte_datei.txt > sortierte_datei.txt

Hier wird der Inhalt von unsortierte_datei.txt sortiert und das Ergebnis in sortierte_datei.txt geschrieben.

Es gibt aber auch die Möglichkeit, die Befehle zu verketten und in einer Befehlszeile alle Befehle nacheinander auszuführen. Und zwar mit der sogenannten pipe.__

Das | Zeichen in dem Befehl wird als "Pipe" bezeichnet und hat eine sehr wichtige Funktion in der UNIX- und Linux-Shell. Es leitet die Ausgabe eines Befehls als Eingabe an den nächsten Befehl weiter. Dies ermöglicht es, mehrere Befehle in einer Pipeline zu verketten, um komplexe Datenverarbeitungsaufgaben durchzuführen.

Beispiel:

*paste Datei1.txt Datei2.txt | sort: bedutet dann

  • Die Ausgabe des Befehls paste Datei1.txt Datei2.txt (die die Zeilen der beiden Dateien nebeneinander kombiniert) wird als Eingabe für den Befehl sort verwendet.

  • Unser Befehl für die 4 Schritte oben sähe dann folgerndermassen aus

paste Datei1.txt Datei2.txt | sort | uniq | shuf > DateiTabelleSortiertKeineDublettenZufall.txt

Das Pipe-Symbol | ist also ein leistungsfähiges Werkzeug in der Unix-Shell, das es ermöglicht, die Ausgabe eines Befehls direkt als Eingabe für den nächsten Befehl zu verwenden, ohne dass Zwischendateien benötigt werden.


Ihre fertige Datei können Sie hier auf Moodle abgeben.