Line Sorter
Zeilen alphabetisch, nach Länge, umgekehrt oder zufällig sortieren
Eingabezeilen
Sortierte Zeilen
Was ist Zeilensortierung?
Zeilensortierung bezeichnet das Neuanordnen der Zeilen eines Textblocks nach einer bestimmten Regel: alphabetische Reihenfolge, umgekehrte Reihenfolge, Zeilenlänge oder eine zufällige Mischung. Das Sortieren von Zeilen ist eine häufige Aufgabe beim Arbeiten mit Logdateien, CSV-Daten, Konfigurationslisten oder beliebigen Klartextinhalten, bei denen die Reihenfolge relevant ist. Der Vorgang teilt den Text an Zeilenumbrüchen auf, wendet eine Vergleichsfunktion auf das resultierende Array an und fügt die sortierten Zeilen wieder zusammen.
Die meisten Programmiersprachen sortieren Zeichenketten standardmäßig lexikografisch, also anhand der Unicode-Codepunkte der Zeichen. Das bedeutet: Großbuchstaben werden vor Kleinbuchstaben einsortiert ("Banana" vor "apple"), und Ziffern kommen vor Buchstaben. Gebietsschema-bewusstes Sortieren — auch Natural Sort oder Kollation genannt — behebt dies durch sprachspezifische Regeln. JavaScript's localeCompare(), Python's locale.strxfrm() und der POSIX-Befehl sort mit LC_COLLATE bieten alle gebietsschema-bewusstes Sortieren.
Das Sortieren nach Länge ist nützlich, wenn man die kürzesten oder längsten Einträge einer Liste finden, Ausreißer in der Logausgabe identifizieren oder Elemente nach Komplexität ordnen möchte. Umgekehrtes Sortieren dreht die bestehende Zeilenreihenfolge um, ohne neu zu ordnen — das unterscheidet sich vom alphabetischen Z-A-Sortieren. Zufälliges Mischen weist jeder Zeile einen zufälligen Sortierschlüssel zu, sodass bei jedem Durchlauf eine andere Reihenfolge entsteht. Das Wechseln zwischen Modi für dieselbe Eingabe ist schneller als das Schreiben eines Einweg-Skripts.
Warum diesen Zeilensortierer verwenden?
Text einfügen, einen Sortiermodus wählen und das Ergebnis sofort erhalten. Kein Kommandozeilen-Setup, keine Skriptdateien, keine Paketinstallationen.
Anwendungsfälle für den Zeilensortierer
Übersicht der Sortiermodi
Dieses Tool unterstützt sechs Sortiermodi. Die folgende Tabelle beschreibt jeden Modus, die verwendete Vergleichsmethode und ein Beispielergebnis für die Eingabeliste: apple, banana, cherry, date, fig.
| Modus | Beschreibung | JS-Methode | Beispielausgabe |
|---|---|---|---|
| A-Z | Alphabetical ascending | localeCompare() | apple, banana, cherry |
| Z-A | Alphabetical descending | localeCompare() reversed | cherry, banana, apple |
| Length (short) | Shortest line first | a.length - b.length | fig, date, apple, banana |
| Length (long) | Longest line first | b.length - a.length | banana, apple, date, fig |
| Reverse | Flip line order, no reordering | Array.reverse() | Last line becomes first |
| Random | Randomized comparator (biased) | Math.random() - 0.5 | Different every run |
Sortieralgorithmen im Hintergrund
Wenn Array.sort() in JavaScript aufgerufen wird, verwendet die V8-Engine (Chrome, Node.js) seit 2019 Timsort. Andere Laufzeitumgebungen verwenden unterschiedliche Algorithmen. Die folgende Tabelle vergleicht die gängigsten Sortieralgorithmen in Standard-Bibliotheken von Programmiersprachen. Alle bewältigen die Zeilensortieraufgaben dieses Tools in unter einer Millisekunde für typische Eingaben (unter 100.000 Zeilen).
| Algorithmus | Verwendet von | Laufzeit | Hinweise |
|---|---|---|---|
| Timsort | Python, Java (Arrays.sort) | O(n log n) | Stable, fast on partially sorted data |
| Quicksort | C stdlib, V8 (older) | O(n log n) | In-place, unstable by default |
| Merge sort | Most stable-sort implementations | O(n log n) | Stable, predictable, uses extra memory |
| Introsort | C++ std::sort, .NET | O(n log n) | Hybrid: quicksort + heapsort fallback |
| Radix sort | Fixed-length keys, integers | O(nk) | Non-comparative, linear for short keys |
Code-Beispiele
Zeilen programmatisch in JavaScript, Python, Go und auf der Kommandozeile sortieren. Jedes Beispiel deckt alphabetisches, längenbasiertes und umgekehrtes Sortieren ab.
const text = `banana
apple
cherry
date
fig`
// Sort A-Z (locale-aware)
const az = text.split('\n').sort((a, b) => a.localeCompare(b)).join('\n')
// → "apple\nbanana\ncherry\ndate\nfig"
// Sort by line length, shortest first
const byLen = text.split('\n').sort((a, b) => a.length - b.length).join('\n')
// → "fig\ndate\napple\nbanana\ncherry"
// Reverse line order (no alphabetical sorting)
const reversed = text.split('\n').reverse().join('\n')
// → "fig\ndate\ncherry\napple\nbanana"
// Remove duplicates and sort
const unique = [...new Set(text.split('\n'))].sort().join('\n')text = """banana apple cherry date fig""" lines = text.splitlines() # Sort A-Z (case-insensitive) az = sorted(lines, key=str.lower) # → ['apple', 'banana', 'cherry', 'date', 'fig'] # Sort by line length by_len = sorted(lines, key=len) # → ['fig', 'date', 'apple', 'banana', 'cherry'] # Reverse original order rev = lines[::-1] # → ['fig', 'date', 'cherry', 'apple', 'banana'] # Shuffle randomly import random random.shuffle(lines) # modifies in place
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
text := "banana\napple\ncherry\ndate\nfig"
lines := strings.Split(text, "\n")
// Sort A-Z
sort.Strings(lines)
fmt.Println(strings.Join(lines, "\n"))
// → apple\nbanana\ncherry\ndate\nfig
// Sort by length
sort.Slice(lines, func(i, j int) bool {
return len(lines[i]) < len(lines[j])
})
fmt.Println(strings.Join(lines, "\n"))
// → fig\ndate\napple\nbanana\ncherry
}# Sort lines A-Z
sort file.txt
# Sort lines Z-A (reverse)
sort -r file.txt
# Sort numerically (first field)
sort -n data.txt
# Sort by line length (awk + sort + cut)
awk '{ print length, $0 }' file.txt | sort -n | cut -d' ' -f2-
# Shuffle lines randomly
shuf file.txt # GNU coreutils
sort -R file.txt # alternative (not truly uniform)
# Sort and remove duplicates
sort -u file.txt