Hledám pryč kontaktní linky založené na dalším řádku. Zatím vidím jediný způsob, jak vytvořit skript shellu, který bude číst řádek po řádku a bude dělat něco v tomto smyslu:
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
Snažím se tedy pochopit, zda by bylo možné dosáhnout pomocí sed nebo dokonce grep s přesměrováním.
Pravidla souboru jsou jednoduchá.
Je zde maximálně jeden a pouze jeden řádek začínající „,“, který potřebuje se připojí k předchozímu řádku.
např.:
line0
line1
line2,line3
line4
line5,line6
line7,line8
line9
line10
line11
Výsledný soubor by byl
line0
line1
line2,line3
line4
line5,line6
line7,line8
line9
line10
line11
Přijatá odpověď:
Udělal bych:
awk -v ORS= '
NR>1 && !/,/ {print "n"}
{print}
END {if (NR) print "n"}' < file
To znamená, že vytiskne pouze znak nového řádku, který ohraničuje předchozí řádek, pokud aktuální nezačíná znakem ,
.
V žádném případě bych nepoužil while read
smyčka.