Comment rejoindre line sous Linux
Lorsque vous travaillez avec du texte sur la ligne de commande, il est parfois utile de joindre plusieurs lignes ensemble. Plutôt que de parcourir des fichiers texte et de déplacer manuellement les lignes pour être sur la même ligne, notre système Linux nous fournit plusieurs outils pour nous simplifier cette tâche. Les fichiers journaux sont un bon exemple de texte qui est généralement divisé en plusieurs lignes, et il est parfois plus facile de visualiser les données lorsque certaines lignes sont jointes. Dans ce tutoriel, nous allons vous montrer plusieurs façons de joindre des lignes d’un fichier sur un système Linux.
Dans ce tutoriel, vous allez apprendre :
- Comment joindre des lignes d’un fichier avec divers outils Linux
Comment joindre une ligne sous Linux - différentes méthodes
À titre d’exemple, nous allons utiliser un fichier qui contient le texte suivant. Il s’agit simplement d’illustrer comment nous pouvons combiner les trois droites en une seule ligne cohésive en utilisant les différentes méthodes présentées ci-dessous.
cat myfile.txt
Linux is
the best
operating system
Si vous avez des données réparties sur plusieurs fichiers, vous pouvez utiliser la commande join pour combiner tout le texte. Bien que la commande
join fournisse une fonction similaire, celle-ci est légèrement différente du scénario avec lequel nous allons travailler ci-dessous, puisque toutes nos lignes sont déjà contenues dans le même fichier. La commande
pasteest sans doute l’outil le plus simple pour ce travail, nous allons donc la couvrir en premier. Il est normalement installé par défaut sur toutes les principales distributions Linux. Nous utiliserons les options-set-dpour fusionner les données par ligne et définir un délimiteur personnalisé, respectivement. Ensuite, nous spécifions un caractère d'espace comme délimiteur avec' ',et enfin nous entrons le chemin d'accès à notre fichier d'entrée.paste -sd ' ' myfile.txt Linux is the best operating systemEn fonction de votre cas d’utilisation, vous pouvez définir un caractère de délimitation différent, tel qu’une virgule :
paste -sd ',' myfile.txt Linux is,the best,operating systemLa méthode suivante que nous pouvons utiliser est la fonction
readarrayintégrée dans le shell Bash. L’avantage de cette méthode est que nous n’avons pas besoin d’outils supplémentaires pour faire le travail.Cette méthode fonctionne en chargeant chaque ligne du fichier d’entrée dans un tableau (nommé
myarraydans cet exemple). Ensuite, nous définissons la variable IFS, qui indique – à plusieurs outils Bash – ce que le séparateur doit être, à un espace (vous pouvez le changer en n’importe quel caractère pour répondre à vos besoins). Enfin, nousfaisons échoà toutes les valeurs du tableau.readarray -t myarray < myfile.txt; IFS=' '; echo "${myarray[*]}" Linux is the best operating systemNotez que l’option
-tdereadarraysupprimera tous les caractères de saut de ligne dans le fichier, avant de charger les valeurs dans un tableau.awk est un utilitaire très polyvalent qui peut également être utilisé pour combiner les données de chaque ligne.
awk 'BEGIN{ORS=" "}1' myfile.txt Linux is the best operating systemDans ce cas, nous définissons la valeur
ORSsur un caractère espace, afin que notre texte soit sorti sous la forme d’une phrase cohérente. Cependant, dans d’autres cas, vous pouvez séparer les lignes par la valeur de votre choix, telle qu’une virgule :awk 'BEGIN{ORS=","}1' myfile.txt Linux is,the best,operating systemLa commande
trest également un outil qui permet de joindre des lignes très simplement. Ici, nous spécifions que nous voulons combiner toutes les données de chaque nouvelle ligne avec'\n', puis nous spécifions un caractère d'espace' 'comme délimiteur.tr '\n' ' ' < myfile.txt Linux is the best operating systemEssayons maintenant de joindre chaque ligne par des virgules :
tr '\n' ',' < myfile.txt Linux is,the best,operating systemAvez-vous déjà vu une tâche de manipulation de texte qui n’a pas pu être abordée par sed ? Nous non plus. Dans cet exemple, nous allons utiliser l’option
-zpour traiter le fichier d’entrée comme une seule ligne, puis nous remplaçons chaque caractère de nouvelle ligne (indiqué par\n) par un espace.sed -z 's/\n/ /g' myfile.txt Linux is the best operating systemOu si vous voulez joindre les lignes et les séparer par un autre caractère, comme des virgules :
sed -z 's/\n/,/g' myfile.txt Linux is,the best,operating systemComme l’option
-zn’est disponible que dans les versions plus récentes desed, voici une autre option qui s’appuie surxargspour combiner toutes les lignes en une seule ligne, avant de transférer le traitement àsed:xargs < myfile.txt | sed -e 's/ / /g' Linux is the best operating system
Réflexions finales
Dans ce tutoriel, nous avons vu comment joindre plusieurs lignes d’un fichier en une seule ligne sur un système Linux. Comme c’est le cas avec la plupart des choses sous Linux, il existe de nombreux outils pour le travail et de nombreuses façons d’accomplir la tâche. Pour la plupart, ils fonctionnent tous à peu près de la même manière, et vous pouvez utiliser celui qui vous semble le plus approprié à votre situation. Nous avons également vu comment nous pouvons utiliser une variété de séparateurs de champs et de caractères délimitants différents pour adapter les commandes à différents scénarios.

