Làm thế nào để bạn bảo awk sử dụng một #
ký tự trong một dòng làm dấu tách bản ghi? Vấn đề là bạn không thể nói RS="^#$"
vì ^
khớp với phần đầu của tệp chứ không phải phần đầu của dòng và RS="#\n"
không hoạt động vì nó khớp với các #
ký tự không nằm ở đầu dòng.
$ data='#
first record, first field
first record, second field
#
second record, first field#
second record, second field
'
Sau đó in trường đầu tiên của mỗi bản ghi, sử dụng 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
Dòng cuối cùng là sai vì nó không phải là trường đầu tiên mà là trường thứ hai. Đầu ra dự định là
first record, first field
second record, first field#
1
Bạn có thể vui lòng cung cấp một ví dụ về đầu ra mà bạn yêu cầu
—
roaima
vậy dữ liệu của bạn trông như thế
—
Skaperen
line one#line two#line three
nào?
và
—
Skaperen
RS="#"
làm gì?
@Skaperen không, dữ liệu trông như thế nào
—
Ernest A
#\nrecord one\n#\nrecord two
và mỗi bản ghi bao gồm nhiều \n
trường khác nhau.
RS='#\n'
nên hoạt động afaik - mặc dù nó sẽ coi ban đầu #
là chấm dứt một bản ghi trống (tức là tất cả các NR
giá trị sẽ bị "tắt" bởi một người)