Darüber hinaus sehen Sie den Tausch eines Feldtrenners. Gerade beim Arbeiten mit CSV-Dateien und Skripten für Datenbanken erledigen Sie auf diese Weise viele Vorgänge. Als letzte Aufgabe löscht das Skript ein Zeichen.
Listing 12
#!/bin/bash
# Dezimaltrenner austauschen als Funktion.
# Punkt muss für Sed als Sonderzeichen
# entwertet werden.
dezimal () {
a=$(echo $a | sed s'/\./,/g')
}
a=12.34
echo " Vor Funktion: $a"
dezimal
echo "Nach Funktion: $a"
echo "-"
# Feldtrenners gegen Tabulatoren tauschen
sed s'/\:/\t/g' Adressen.txt
echo -e "\n--"
# Löschen eines Zeichens, hier ":"
head -1 < Adressen.txt | sed s'/\://g'
Text sortieren
Gerade im Zusammenhang mit CSV-Dateien, Datenbanken und mit dem Befehl uniq, mit dem Sie mehrfach vorkommende, identische Zeilen filtern, benötigen Sie den Befehl sort: Er bringt das Ausgangsmaterial in einem ersten Schritt in eine geordnete Form. Die Tabelle “Sort-Optionen” zeigt einige der umfangreichen Möglichkeiten.
Sort-Optionen
|
Option |
Aktion |
|---|---|
|
|
führende Leerzeichen ignorieren |
|
|
prüfen, ob Datei bereits sortiert ist |
|
|
Groß/Kleinschreibung ignorieren |
|
|
sortierte Dateien zusammenführen |
|
|
Ergebnis in Datei umleiten |
|
|
in umgekehrter Reihenfolge sortieren |
|
|
numerisch sortieren |
|
|
Angabe des Feldtrenners |
|
|
mehrfach vorhandene Zeilen nur einmal ausgeben |
Listing 13 zeigt drei Beispiel: Zunächst sortiert das Skript die Adressdatei alphanumerisch aufsteigend, anschließend rückwärts. Im dritten Beispiel sehen Sie, wie Sie bei strukturierten Textdateien eine Spalte angeben, die als Sortierkriterium dient. Dazu müssen Sie zusätzlich den Feldtrenner benennen.
Listing 13
#!/bin/bash echo "Normal sortiert:" sort < Adressen.txt echo "--------------------" echo "umgekehrt:" sort -r < Adressen.txt echo "--------------------" echo "nach Nummer (Feld 6)" sort -t':' -n -k6 < Adressen.txt echo "--------------------"
Zeilen nummerieren
In einigen Fällen kann der Bedarf entstehen, die Zeilen von Textdateien zu nummerieren. Das erledigen Sie mittels nl. Die Tabelle “Nl: Optionen” führt die wichtigsten Optionen auf, Listing 14 zeigt einige Praxisbeispiele. Im Alltag versehen Sie damit vorsortierte Dateien mit eindeutigen Zeilennummern. Das hilft vor allem dann, wenn Sie über diverse Suchfunktionen gezielt einzelne Zeilen ansprechen müssen.
Nl: Optionen
|
Aktion |
Option |
Schalter |
|---|---|---|
|
Numeriert gemäß |
|
|
|
Numeriert mit |
|
|
|
Trennzeichen |
|
– |
|
Startwert |
|
– |
|
Inkrement |
|
– |
Listing 14
#!/bin/bash # Alle Zeilen nummerieren, auch Leerzeilen # Standard: rechtsbündig (-nrn) nl -ba < Adressen.txt # Alle Zeilen linksbündig nummerieren nl -ba -nln < Adressen.txt # Alle Zeilen rechtsbündig nummerieren, # führende Nullen, Trennzeichen = | nl -ba -nrz -s'|' < Adressen.txt # Alle Zeilen nummerieren, # erste Zeile=10, Schrittweite = 20 nl -v10 -i20 < Adressen.txt
Identische Zeilen
Zusammen mit Sort setzen Sie das Kommando uniq ein, um doppelt vorhandene Zeilen zu erkennen und zu behandeln. Das Tool erwartet die mehrfach vorhandenen, identischen Zeilen stets direkt aufeinander folgend – daher die Kombination mit Sort. Die wichtigsten Optionen fasst die Tabelle “Uniq-Optionen” zusammen.
Uniq-Optionen
|
Aktion |
Option |
|---|---|
|
|
Vorkommen zählen |
|
|
nur mehrfach vorhandene Zeilen ausgeben |
|
|
nur einfach vorkommende Zeilen ausgeben |
|
|
Groß/Kleinschreibung ignorieren |
|
|
nur |
Als Datensatz für die Beispiele dient die Datei einzigartig.txt, die Sie in Listing 15 sehen. Das Beispiel aus Listing 16 zeigt Ihnen verschiedene Abläufe. Interessant für die Praxis ist das Umkehren des Befehls, nämlich nur einfach vorhandene Zeilen auszugeben. Auch das Ignorieren der Groß- und Kleinschreibung erweist sich oft als hilfreich.
Listing 15
a A C D
Listing 16
#!/bin/bash # Aufruf ohne Sortierung uniq < einzigartig.txt echo "-------------" # Vorsortierung, Schreibweise # ignorieren, Vorkommen zählen sort -f < einzigartig.txt | uniq -ic echo "-------------" # Ausgabe mehrfach vorhandener Zeilen sort -f < einzigartig.txt | uniq -id echo "-------------" # Ausgabe einfach vorhandener Zeilen sort -f < einzigartig.txt | uniq -iu
Zusammenfügen
Mit cat fügen Sie Textdateien seriell, also hintereinander zusammen. Wenn Sie dabei für die Dateinamen nur * angeben, erfolgt die Reihung in deren alphanumerischen Reihenfolge. Möchten Sie das Ergebnis in eine neue Datei schreiben, lenken Sie dazu die Ausgabe um.
$ cat DATEI1 DATEI2 .... > neu.txt $ cat *.txt > neu.txt
Mit paste fügen Sie Dateien spaltenweise zusammen. Das setzt voraus, dass die Quelldateien dieselbe Länge haben. Bei Bedarf überprüfen Sie dies mit wc -l in einem Terminal. Anschließend sorgen Sie dafür, dass die Daten entsprechend sortiert sind. Die Eingabe paste -s Datei1Datei2 > neu.txt setzt die Dateien in der Form zusammen, dass jede Datei eine Spalte bildet.





