GNU/Linux >> Znalost Linux >  >> Linux

Zřetězit čáry na základě prvního znaku dalšího řádku?

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.


Linux
  1. Kočičí čára X do čáry Y na obrovském souboru?

  2. Odebrat další řádky záhlaví ze souboru, kromě prvního řádku?

  3. Jak připojit více řádků k souboru?

  1. Počítat řádky v souboru?

  2. Odstranění konkrétních řádků ze souboru v příkazovém řádku Linuxu

  3. Jak počítat řádky v souboru v UNIX/Linux

  1. Vytiskněte soubor s vynecháním prvních X řádků v Bash

  2. unix - počet sloupců v souboru

  3. Linux - grep od určitých řádků až do konce souboru