Как вы говорите awk использовать #
символ в строке как разделитель записей? Проблема в том, что вы не можете сказать, RS="^#$"
потому что ^
соответствует началу файла, а не началу строки, и RS="#\n"
не работает, потому что он соответствует #
символам, которые не находятся в начале строки.
$ data='#
first record, first field
first record, second field
#
second record, first field#
second record, second field
'
Затем напечатайте первое поле каждой записи, используя 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
Последняя строка неверна, потому что это не первое поле, а второе. Предполагаемый результат был
first record, first field
second record, first field#
line one#line two#line three
?RS="#"
чем занимается?#\nrecord one\n#\nrecord two
и каждая запись состоит из нескольких\n
разделенных полей.RS='#\n'
должен работать afaik - хотя он будет трактовать начальную#
как завершение пустой записи (т.е. всеNR
значения будут «выключены» на одну единицу)Ответы:
Вот один из способов сделать это
awk
:Хитрость заключается в том, чтобы установить в качестве разделителя записей либо начало файла (
^
), либо символ новой строки, за которым следует знак «a»#
и другой символ новой строки\n
.источник
/./
наNR==1
). Я думаю, что самое простое решение было бы иметь конец файла / данных - вместо того, чтобы начинаться - с#
в отдельной строке. затем\n#\n
можно использовать как RS, и он будет работать правильно.NR==1
не будут работать, если есть еще пустые строки ниже.