Bagaimana Anda memberi tahu awk untuk menggunakan #
karakter dengan sendirinya di baris sebagai pemisah rekaman? Masalahnya adalah Anda tidak bisa mengatakannya RS="^#$"
karena ^
cocok dengan awal file, bukan awal baris, dan RS="#\n"
tidak berfungsi karena cocok dengan #
karakter yang tidak ada di awal baris.
$ data='#
first record, first field
first record, second field
#
second record, first field#
second record, second field
'
Kemudian cetak bidang pertama dari setiap catatan, menggunakan RS="#\n"
:
$ printf "%s" "$data" | awk '
BEGIN { RS="#\n"; FS="\n" }
/./ {print $1}
'
first record, first field
second record, first field
second record, second field
Baris terakhir salah karena ini bukan bidang pertama tetapi yang kedua. Output yang dimaksudkan adalah
first record, first field
second record, first field#
line one#line two#line three
?RS="#"
melakukan apa?#\nrecord one\n#\nrecord two
dan setiap catatan terdiri dari beberapa\n
bidang yang dipisahkan.RS='#\n'
harus bekerja afaik - meskipun akan memperlakukan awal#
sebagai penghentian catatan kosong (yaitu semuaNR
nilai akan "dimatikan" oleh satu)Jawaban:
Inilah salah satu cara melakukannya
awk
:Caranya adalah dengan mengatur pemisah record untuk baik awal file (
^
), atau baris baru, diikuti oleh#
dan lain baris baru\n
.sumber
/./
denganNR==1
). Saya pikir solusi termudah adalah memiliki akhir file / data - bukannya memulai - dengan#
pada baris yang terpisah. Kemudian\n#\n
bisa digunakan sebagai RS dan itu akan berfungsi dengan baik.NR==1
tidak akan berfungsi jika ada lebih banyak garis kosong di bawahnya.