Comment utiliser ^ # $ comme séparateur d'loggings dans awk?

Comment dites-vous awk d'utiliser un caractère # par lui-même dans une ligne comme séparateur d'logging? Le problème est que vous ne pouvez pas dire RS="^#$" parce que ^ correspond au début du file, pas au début d'une ligne, et RS="#\n" ne sont pas au début d'une ligne.

 $ data='# first record, first field first record, second field # second record, first field# second record, second field ' 

Imprimez ensuite le premier champ de chaque logging en utilisant 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 

La dernière ligne est fausse car ce n'est pas le premier champ mais le second. Le résultat visé était

 first record, first field second record, first field# 

Voici une façon de le faire dans awk :

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

L'astuce consiste à définir le séparateur d'loggings soit au début du file ( ^ ), soit à une nouvelle ligne, suivi d'un # et d'une autre nouvelle ligne \n .