GNU/Linux >> Belajar Linux >  >> Linux

Menggabungkan Garis Berdasarkan Karakter Pertama Dari Baris Berikutnya?

Saya mencari jalur kontak jauh berdasarkan jalur berikutnya. Sejauh ini satu-satunya cara yang saya lihat adalah membuat skrip shell yang akan membaca baris demi baris dan akan melakukan sesuatu di sepanjang baris ini:

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

Jadi saya mencoba memahami apakah dapat dicapai dengan sed atau bahkan grep dengan pengalihan.
aturan filenya sederhana.
Ada maksimal satu dan hanya satu baris yang dimulai dengan "," yang perlu untuk ditambahkan ke baris sebelumnya.

contoh:

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

File hasil akan menjadi

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

Jawaban yang Diterima:

Saya akan melakukan:

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

Artinya, hanya mencetak karakter baris baru yang membatasi baris sebelumnya jika yang sekarang tidak dimulai dengan , .

Bagaimanapun, saya tidak akan menggunakan while read lingkaran.


Linux
  1. Cat Line X Ke Line Y Pada File Besar?

  2. Bagaimana Melewati Garis File?

  3. Hapus Beberapa Baris Pertama Secara Efisien Dari File Teks?

  1. Bagaimana Cara Menambahkan Beberapa Baris Ke File?

  2. Menghapus Baris Tertentu dari File di Baris Perintah Linux

  3. Cara Menghitung baris dalam file di UNIX/Linux

  1. Cetak file, lewati baris X pertama, di Bash

  2. skrip bash menambahkan teks ke baris pertama file

  3. Hapus N baris pertama dari file log aktif