join et split résolvent deux problèmes différents. join combine des enregistrements liés provenant de deux entrées triées ; split divise une entrée en une série de fichiers.
Text-Fu · Leçon 11
join et split
Apprenez à joindre deux fichiers texte triés par une clé et à découper un fichier en fragments nommés.
Joindre deux fichiers par leur premier champ
Par défaut, join compare le premier champ séparé par des blancs dans exactement deux fichiers. Avec ces fichiers déjà triés :
people.txt :
1 John
2 Jane
3 Mary
surnames.txt :
1 Doe
2 Doe
3 Sue
$ join people.txt surnames.txt
1 John Doe
2 Jane Doe
3 Mary Sue
La sortie contient une fois la clé commune, puis les autres champs des deux fichiers. join traite deux fichiers à la fois, pas une jointure relationnelle à trois opérandes.
Sans option de champ, quels enregistrements join first.txt second.txt combine-t-il ?
Trier les clés de jointure
Chaque entrée doit être ordonnée selon sa clé avec des règles compatibles :
$ LC_ALL=C sort -k 1,1 people-raw.txt > people.txt
$ LC_ALL=C sort -k 1,1 surnames-raw.txt > surnames.txt
$ LC_ALL=C join people.txt surnames.txt
La même locale garantit une collation cohérente. Ne redirigez jamais sort vers son propre fichier d'entrée, que le shell tronquerait avant la lecture.
Quelle préparation join exige-t-il normalement ?
Choisir d'autres champs de jointure
-1 FIELD choisit la clé du premier fichier et -2 FIELD celle du second. Pour une première entrée comme :
John 1
Jane 2
Mary 3
et une seconde comme :
1 Doe
2 Doe
3 Sue
après les tris appropriés :
$ join -1 2 -2 1 people.txt surnames.txt
1 John Doe
2 Jane Doe
3 Mary Sue
-t CHARACTER définit un délimiteur non blanc. -a 1 ou -a 2 peut inclure les lignes sans partenaire ; par défaut, seules les clés appariées apparaissent.
Quelles options joignent le champ 2 du premier fichier au champ 1 du second ?
Découper par nombre de lignes
split écrit des portions consécutives d'une entrée. Ce n'est pas l'inverse d'une jointure par clé.
$ split large.txt
Choisissez le nombre de lignes et le préfixe de sortie avec :
$ split -l 500 large.txt part-
Par défaut, GNU split écrit jusqu'à 1000 lignes dans xaa, xab, etc. La seconde forme crée part-aa, part-ab, etc., avec au plus 500 lignes.
Quelle commande découpe large.txt en fragments d'au plus 500 lignes préfixés par part- ?
Découper par taille
-b SIZE choisit une taille en octets. Pour GNU, K, M et G représentent ici des puissances de 1024 :
$ split -b 10M archive.bin chunk-
Les fragments font 10 Mio, sauf éventuellement le dernier. split ne crée ni manifeste ni métadonnées ; conservez l'ordre des suffixes pour une reconstruction par concaténation.
Quelle commande découpe archive.bin en fragments de 10 Mio préfixés par chunk- ?
Pour vous exercer :
- Commande Linux join : joindre des fichiers - Fusionnez les lignes de deux fichiers triés par un champ commun.
- Traiter des données d'employés - Combinez plusieurs sources avec
joinetawk.
Leçon terminée
Vous avez terminé join et split
Vous savez combiner des enregistrements triés ou diviser une entrée en fragments ordonnés.
Joindre exactement deux fichiers par clés égales.
Trier les entrées de façon cohérente.
Choisir les clés avec
-1et-2.Découper par lignes avec
-l.Découper par octets avec
-bet un préfixe clair.
Conservez votre progression
Créez un compte gratuit pour enregistrer cette leçon et continuer sur n'importe quel appareil.
Créer un compte gratuit