join et split
100%

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.

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.

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- ?

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 -1 et -2.

  • Découper par lignes avec -l.

  • Découper par octets avec -b et 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
Leçon Suivante
Retour à Text-Fu