Como usar ^ # $ como separador de registro no awk?

8

Como você diz ao awk para usar um caractere # sozinho em uma linha como registro? separador? O problema é que você não pode dizer RS="^#$" porque ^ corresponde ao início do arquivo, não o início de uma linha, e RS="#\n" 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. o resultado pretendido foi

first record, first field
second record, first field#
    
por Ernest A 21.03.2015 / 12:20

1 resposta

6

Aqui está uma maneira de fazer isso em awk :

$ printf "%s\n" "$data" | 
    awk -F'\n' -v RS='(^|\n)#\n' '/./ {print $1}' 
first record, first field
second record, first field#

O truque é definir o separador de registro como no início do arquivo ( ^ ) ou em uma nova linha, seguido por # e outra nova linha \n .

por 21.03.2015 / 14:24

Tags