Trieur de lignes
Trier les lignes alphabétiquement, par longueur, inverser ou aléatoriser l'ordre des lignes
Lignes d'entrée
Lignes triées
Qu'est-ce que le tri de lignes ?
Le tri de lignes est le processus de réorganisation des lignes d'un bloc de texte selon une règle précise : ordre alphabétique, ordre inverse, longueur de ligne ou mélange aléatoire. Trier des lignes en ligne est une tâche courante lors du traitement de fichiers journaux, de données CSV, de listes de configuration ou de tout contenu en texte brut où l'ordre est important. L'opération découpe le texte sur les caractères de saut de ligne, applique une fonction de comparaison au tableau résultant, puis réassemble les lignes triées.
La plupart des langages de programmation trient les chaînes de caractères par comparaison lexicographique par défaut, ce qui compare les caractères selon leurs points de code Unicode. Cela signifie que les majuscules sont triées avant les minuscules ("Banane" avant "ananas"), et les chiffres avant les lettres. Le tri tenant compte de la locale, parfois appelé tri naturel ou collation, corrige cela en appliquant des règles propres à la langue. La méthode localeCompare() de JavaScript, la fonction locale.strxfrm() de Python et la commande POSIX sort avec LC_COLLATE fournissent tous un tri respectant la locale.
Le tri par longueur est utile pour trouver les entrées les plus courtes ou les plus longues d'une liste, identifier les valeurs aberrantes dans une sortie de journal, ou organiser les éléments par complexité. Le tri inverse retourne l'ordre actuel des lignes sans les réordonner, ce qui est différent du tri alphabétique Z-A. Le mélange aléatoire attribue à chaque ligne une clé de tri aléatoire, produisant un ordre différent à chaque exécution. Passer d'un mode à l'autre sur le même contenu est plus rapide qu'écrire un script ponctuel.
Pourquoi utiliser ce trieur de lignes ?
Colle ton texte, choisis un mode de tri et obtiens le résultat instantanément. Pas de configuration en ligne de commande, pas de fichiers de script, pas d'installation de paquets.
Cas d'usage du trieur de lignes
Référence des modes de tri de lignes
Cet outil propose six modes de tri. Le tableau ci-dessous décrit chaque mode, la méthode de comparaison utilisée et un exemple de résultat pour la liste d'entrée : pomme, banane, cerise, datte, figue.
| Mode | Description | Méthode JS | Exemple de sortie |
|---|---|---|---|
| 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 |
Algorithmes de tri en coulisses
Lorsque tu appelles Array.sort() en JavaScript, le moteur V8 (Chrome, Node.js) utilise Timsort depuis 2019. D'autres environnements d'exécution utilisent des algorithmes différents. Le tableau ci-dessous compare les algorithmes de tri les plus courants utilisés dans les bibliothèques standard des langages. Tous gèrent les charges de tri de lignes de cet outil en moins d'une milliseconde pour des données typiques (moins de 100 000 lignes).
| Algorithme | Utilisé par | Complexité | Notes |
|---|---|---|---|
| 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 |
Exemples de code
Trie des lignes par programmation en JavaScript, Python, Go et en ligne de commande. Chaque exemple couvre le tri alphabétique, par longueur et inversé.
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