Les commandes Linux split et join sont très utiles lorsque vous manipulez des fichiers volumineux. Cet article explique comment utiliser la commande Linux split and join avec des exemples descriptifs.
Syntaxe des commandes de jointure et de fractionnement :
join [OPTION]… FILE1 FILE2
split [OPTION]… [INPUT [PREFIX]]
Exemples de commandes fractionnées Linux
1. Exemple de fractionnement de base
Voici un exemple de base de la commande split.
$ split split.zip $ ls split.zip xab xad xaf xah xaj xal xan xap xar xat xav xax xaz xbb xbd xbf xbh xbj xbl xbn xaa xac xae xag xai xak xam xao xaq xas xau xaw xay xba xbc xbe xbg xbi xbk xbm xbo
Nous voyons donc que le fichier split.zip a été divisé en fichiers plus petits avec x** comme noms de fichiers. Où ** est le suffixe à deux caractères ajouté par défaut. De plus, par défaut, chaque fichier x** contiendrait 1000 lignes.
$ wc -l * 40947 split.zip 1000 xaa 1000 xab 1000 xac 1000 xad 1000 xae 1000 xaf 1000 xag 1000 xah 1000 xai ... ... ...
Ainsi, la sortie ci-dessus confirme que, par défaut, chaque fichier x** contient 1 000 lignes.
2. Modifiez la longueur du suffixe à l'aide de l'option -a
Comme indiqué dans l'exemple 1 ci-dessus, la longueur du suffixe par défaut est 2. Mais cela peut être modifié en utilisant l'option -a.
Comme vous le voyez dans l'exemple suivant, il utilise le suffixe de longueur 5 sur les fichiers fractionnés.
$ split -a5 split.zip $ ls split.zip xaaaac xaaaaf xaaaai xaaaal xaaaao xaaaar xaaaau xaaaax xaaaba xaaabd xaaabg xaaabj xaaabm xaaaaa xaaaad xaaaag xaaaaj xaaaam xaaaap xaaaas xaaaav xaaaay xaaabb xaaabe xaaabh xaaabk xaaabn xaaaab xaaaae xaaaah xaaaak xaaaan xaaaaq xaaaat xaaaaw xaaaaz xaaabc xaaabf xaaabi xaaabl xaaabo
Remarque :Plus tôt, nous avons également discuté d'autres utilitaires de manipulation de fichiers - tac, rev, paste.
3. Personnalisez la taille du fichier fractionné à l'aide de l'option -b
La taille de chaque fichier divisé en sortie peut être contrôlée à l'aide de l'option -b.
Dans cet exemple, les fichiers fractionnés ont été créés avec une taille de 200 000 octets.
$ split -b200000 split.zip $ ls -lart total 21084 drwxrwxr-x 3 himanshu himanshu 4096 Sep 26 21:20 .. -rw-rw-r-- 1 himanshu himanshu 10767315 Sep 26 21:21 split.zip -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xad -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xac -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xab -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xaa -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xah -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xag -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xaf -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xae -rw-rw-r-- 1 himanshu himanshu 200000 Sep 26 21:35 xar ... ... ...
4. Créez des fichiers fractionnés avec un suffixe numérique à l'aide de l'option -d
Comme on le voit dans les exemples ci-dessus, la sortie a le format x** où ** sont des alphabets. Vous pouvez le changer en nombre en utilisant l'option -d.
Voici un exemple. Ceci a un suffixe numérique sur les fichiers fractionnés.
$ split -d split.zip $ ls split.zip x01 x03 x05 x07 x09 x11 x13 x15 x17 x19 x21 x23 x25 x27 x29 x31 x33 x35 x37 x39 x00 x02 x04 x06 x08 x10 x12 x14 x16 x18 x20 x22 x24 x26 x28 x30 x32 x34 x36 x38 x40
5. Personnalisez le nombre de fragments fractionnés à l'aide de l'option -C
Pour contrôler le nombre de morceaux, utilisez l'option -C.
Cet exemple créera 50 morceaux de fichiers fractionnés.
$ split -n50 split.zip $ ls split.zip xac xaf xai xal xao xar xau xax xba xbd xbg xbj xbm xbp xbs xbv xaa xad xag xaj xam xap xas xav xay xbb xbe xbh xbk xbn xbq xbt xbw xab xae xah xak xan xaq xat xaw xaz xbc xbf xbi xbl xbo xbr xbu xbx
6. Évitez les morceaux de taille nulle en utilisant l'option -e
Tout en divisant un fichier relativement petit en un grand nombre de morceaux, il est bon d'éviter les morceaux de taille nulle car ils n'ajoutent aucune valeur. Cela peut être fait en utilisant l'option -e.
Voici un exemple :
$ split -n50 testfile $ ls -lart x* -rw-rw-r-- 1 himanshu himanshu 0 Sep 26 21:55 xag -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xaf -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xae -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xad -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xac -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xab -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:55 xaa -rw-rw-r-- 1 himanshu himanshu 0 Sep 26 21:55 xbx -rw-rw-r-- 1 himanshu himanshu 0 Sep 26 21:55 xbw -rw-rw-r-- 1 himanshu himanshu 0 Sep 26 21:55 xbv ... ... ...
Nous voyons donc que de nombreux morceaux de taille nulle ont été produits dans la sortie ci-dessus. Maintenant, utilisons l'option -e et voyons les résultats :
$ split -n50 -e testfile $ ls split.zip testfile xaa xab xac xad xae xaf $ ls -lart x* -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xaf -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xae -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xad -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xac -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xab -rw-rw-r-- 1 himanshu himanshu 1 Sep 26 21:57 xaa
Nous voyons donc qu'aucun morceau de taille nulle n'a été produit dans la sortie ci-dessus.
7. Personnalisez le nombre de lignes à l'aide de l'option -l
Le nombre de lignes par fichier divisé en sortie peut être personnalisé à l'aide de l'option -l.
Comme on le voit dans l'exemple ci-dessous, les fichiers fractionnés sont créés avec 20 000 lignes.
$ split -l20000 split.zip $ ls split.zip testfile xaa xab xac $ wc -l x* 20000 xaa 20000 xab 947 xac 40947 total
Obtenir des informations détaillées à l'aide de l'option –verbose
Pour obtenir un message de diagnostic chaque fois qu'un nouveau fichier fractionné est ouvert, utilisez l'option –verbose comme indiqué ci-dessous.
$ split -l20000 --verbose split.zip creating file `xaa' creating file `xab' creating file `xac'
Exemples de commandes de jointure Linux
8. Exemple de jointure de base
La commande Join fonctionne sur le premier champ des deux fichiers (fournis en entrée) en faisant correspondre les premiers champs.
Voici un exemple :
$ cat testfile1 1 India 2 US 3 Ireland 4 UK 5 Canada $ cat testfile2 1 NewDelhi 2 Washington 3 Dublin 4 London 5 Toronto $ join testfile1 testfile2 1 India NewDelhi 2 US Washington 3 Ireland Dublin 4 UK London 5 Canada Toronto
On voit donc qu'un fichier contenant des pays a été joint à un autre fichier contenant des capitales sur la base du premier champ.
9. Joindre des travaux sur la liste triée
Si l'un des deux fichiers fournis pour joindre la commande n'est pas trié, un avertissement s'affiche dans la sortie et cette entrée particulière n'est pas jointe.
Dans cet exemple, puisque le fichier d'entrée n'est pas trié, il affichera un message d'avertissement/d'erreur.
$ cat testfile1 1 India 2 US 3 Ireland 5 Canada 4 UK $ cat testfile2 1 NewDelhi 2 Washington 3 Dublin 4 London 5 Toronto $ join testfile1 testfile2 1 India NewDelhi 2 US Washington 3 Ireland Dublin join: testfile1:5: is not sorted: 4 UK 5 Canada Toronto
10. Ignorer la casse en utilisant l'option -i
Lors de la comparaison de champs, la différence de casse peut être ignorée en utilisant l'option -i comme indiqué ci-dessous.
$ cat testfile1 a India b US c Ireland d UK e Canada $ cat testfile2 a NewDelhi B Washington c Dublin d London e Toronto $ join testfile1 testfile2 a India NewDelhi c Ireland Dublin d UK London e Canada Toronto $ join -i testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London e Canada Toronto
11. Vérifiez que l'entrée est triée à l'aide de l'option –check-order
Voici un exemple. Étant donné que testfile1 n'a pas été trié vers la fin, une erreur s'est produite dans la sortie.
$ cat testfile1 a India b US c Ireland d UK f Australia e Canada $ cat testfile2 a NewDelhi b Washington c Dublin d London e Toronto $ join --check-order testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London join: testfile1:6: is not sorted: e Canada
12. Ne vérifiez pas le tri à l'aide de l'option –nocheck-order
C'est le contraire de l'exemple précédent. Aucune vérification du tri n'est effectuée dans cet exemple, et il n'affichera aucun message d'erreur.
$ join --nocheck-order testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London
13. Imprimer les lignes non appairables à l'aide de l'option -a
Si les deux fichiers d'entrée ne peuvent pas être mappés un à un, alors via l'option -a[FILENUM] nous pouvons avoir ces lignes qui ne peuvent pas être appariées lors de la comparaison. FILENUM est le numéro de fichier (1 ou 2).
Dans l'exemple suivant, nous voyons que l'utilisation de -a1 a produit la dernière ligne dans testfile1 (marquée en gras ci-dessous) qui n'avait pas de paire dans testfile2.
$ cat testfile1 a India b US c Ireland d UK e Canada f Australia $ cat testfile2 a NewDelhi b Washington c Dublin d London e Toronto $ join testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London e Canada Toronto $ join -a1 testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London e Canada Toronto f Australia
14. Imprimer uniquement les lignes non appariées à l'aide de l'option -v
Dans l'exemple ci-dessus, des lignes appariées et non appariées ont été produites dans la sortie. Mais, si seule une sortie non appariée est souhaitée, utilisez l'option -v comme indiqué ci-dessous.
$ join -v1 testfile1 testfile2 f Australia
15. Jointure basée sur différentes colonnes des deux fichiers à l'aide des options -1 et -2
Par défaut, les premières colonnes des deux fichiers sont utilisées pour comparer avant de se joindre. Vous pouvez modifier ce comportement en utilisant les options -1 et -2.
Dans l'exemple suivant, la première colonne de testfile1 a été comparée à la deuxième colonne de testfile2 pour produire la sortie de la commande join.
$ cat testfile1 a India b US c Ireland d UK e Canada $ cat testfile2 NewDelhi a Washington b Dublin c London d Toronto e $ join -1 1 -2 2 testfile1 testfile2 a India NewDelhi b US Washington c Ireland Dublin d UK London e Canada Toronto