GNU/Linux >> Tutoriels Linux >  >> Linux

Concaténer des lignes en fonction du premier caractère de la ligne suivante ?

Je recherche des lignes de contact éloignées basées sur la ligne suivante. Jusqu'à présent, la seule façon que je vois est de créer un script shell qui lira ligne par ligne et fera quelque chose dans ce sens :

while read line
    if $line does not start with "," and $curr_line is empty 
        store line in curr_line
    if $line does not start with "," and $curr_line is not empty
        flush $curr_line to file
        store $line in $curr_line
    if $line starts with "," append to $curr_file, flush to file empty curr_line
done < file

J'essaie donc de comprendre si cela pourrait être réalisé avec sed ou même grep avec redirection.
les règles du fichier sont simples.
Il y a au maximum une et une seule ligne commençant par "," qui a besoin à ajouter à la ligne précédente.

ex :

line0
line1
line2,line3
line4
line5,line6
line7,line8
line9
line10
line11

Le fichier de résultat serait

line0
line1
line2,line3
line4
line5,line6
line7,line8
line9
line10
line11

Réponse acceptée :

Je ferais :

awk -v ORS= '
  NR>1 && !/,/ {print "n"}
  {print}
  END {if (NR) print "n"}' < file

Autrement dit, n'imprime que le caractère de nouvelle ligne qui délimite la ligne précédente si la ligne actuelle ne commence pas par un , .

Dans tous les cas, je n'utiliserais pas un while read boucle.


Linux
  1. Cat ligne X à ligne Y sur un énorme fichier ?

  2. Comment insérer du texte avant la première ligne d'un fichier ?

  3. Supprimer efficacement les premières lignes d'un fichier texte ?

  4. Suppression de lignes spécifiques d'un fichier dans la ligne de commande Linux

  5. Comment compter les lignes d'un fichier sous UNIX/Linux

Comment supprimer des lignes d'un fichier à l'aide de la commande Sed

Comment trouver la ou les lignes les plus longues dans un fichier sous Linux

Imprimer un fichier, en sautant les X premières lignes, dans Bash

unix - nombre de colonnes dans le fichier

Comment concaténer plusieurs lignes de sortie sur une seule ligne ?

Linux - grep de certaines lignes à la fin du fichier