Como você diz ao awk para usar um #
caractere sozinho em uma linha como separador de registros? O problema é que você não pode dizer RS="^#$"
porque ^
corresponde ao início do arquivo, não ao início de uma linha, e RS="#\n"
também não funciona porque corresponde a #
caracteres que não estão no início de uma linha.
$ data='#
first record, first field
first record, second field
#
second record, first field#
second record, second field
'
Em seguida, imprima o primeiro campo de cada registro, usando 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
A última linha está errada porque não é o primeiro campo, mas o segundo. A saída pretendida foi
first record, first field
second record, first field#
line one#line two#line three
?RS="#"
faz o que?#\nrecord one\n#\nrecord two
e cada registro consiste em vários\n
campos separados.RS='#\n'
deve funcionar afaik - embora possa tratar o inicial#
como encerra uma ficha vazio (ou seja, todos osNR
valores serão "off" por um)Respostas:
Aqui está uma maneira de fazer isso
awk
:O truque é definir o separador de registros como o início do arquivo (
^
) ou uma nova linha, seguida por uma#
e outra nova linha\n
.fonte
/./
porNR==1
). Eu acho que a solução mais fácil seria ter o arquivo / dados terminando - em vez de iniciar - com um#
em uma linha separada. Então\n#\n
poderia ser usado como RS e funcionaria corretamente.NR==1
não funcionará se houver mais linhas em branco mais abaixo.