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.