Recherche de site Web

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

REMARQUE
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.

  1. La commande paste est 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 -s et -d pour 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 system
    

    En 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 system
    
  2. La méthode suivante que nous pouvons utiliser est la fonction readarray inté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é myarray dans 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, nous faisons écho à toutes les valeurs du tableau.

    
    readarray -t myarray < myfile.txt; IFS=' '; echo "${myarray[*]}"
    Linux is the best operating system
    

    Notez que l’option -t de readarray supprimera tous les caractères de saut de ligne dans le fichier, avant de charger les valeurs dans un tableau.

  3. 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 system
    

    Dans ce cas, nous définissons la valeur ORS sur 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 system
    
  4. La commande tr est é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 system
    

    Essayons maintenant de joindre chaque ligne par des virgules :

    
    tr '\n' ',' < myfile.txt
    Linux is,the best,operating system
    
  5. Avez-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 -z pour 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 system
    

    Ou 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 system
    

    Comme l’option -z n’est disponible que dans les versions plus récentes de sed, voici une autre option qui s’appuie sur xargs pour 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.

Articles connexes: