GNU/Linux >> Linux Esercitazione >  >> Linux

Concatenare le linee in base al primo carattere della riga successiva?

Sto cercando linee di contatto in trasferta basate sulla linea successiva. Finora l'unico modo che vedo è creare uno script di shell che leggerà riga per riga e farà qualcosa in questo modo:

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

Quindi sto cercando di capire se potrebbe essere ottenuto con sed o anche grep con reindirizzamento.
le regole del file sono semplici.
C'è al massimo una e solo una riga che inizia con "", che deve da aggiungere alla riga precedente.

es:

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

Il file dei risultati sarebbe

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

Risposta accettata:

Lo farei:

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

Cioè, stampa solo quel carattere di nuova riga che delimita la riga precedente se quella corrente non inizia con un , .

In ogni caso, non userei un while read ciclo.


Linux
  1. Come scorrere le righe di un file?

  2. Come aggiungere più righe a un file?

  3. Contare le righe in un file?

  4. Eliminazione di righe specifiche da un file nella riga di comando di Linux

  5. Come contare le righe in un file in UNIX/Linux

Come rimuovere le righe da un file usando il comando Sed

Come trovare le righe più lunghe in un file in Linux

Rimuovere le righe di intestazione extra dal file, ad eccezione della prima riga?

Come visualizzare righe specifiche di un file nella riga di comando di Linux

unix - conteggio delle colonne nel file

Rimuove le prime N righe da un file di registro attivo