Comment dites-vous à awk d'utiliser un #
caractère seul dans une ligne comme séparateur d'enregistrement? Le problème est que vous ne pouvez pas le dire RS="^#$"
car ^
correspond au début du fichier, pas au début d'une ligne, et RS="#\n"
ne fonctionne pas non plus car il correspond à des #
caractères qui 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 enregistrement 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. La sortie prévue était
first record, first field
second record, first field#
line one#line two#line three
?RS="#"
fait quoi?#\nrecord one\n#\nrecord two
et chaque enregistrement se compose de plusieurs\n
champs séparés.RS='#\n'
devrait fonctionner afaik - bien qu'il traite l'initiale#
comme mettant fin à un enregistrement vide (c'est-à-dire que toutes lesNR
valeurs seront "désactivées" par un)Réponses:
Voici une façon de le faire dans
awk
:L'astuce consiste à définir le séparateur d'enregistrement pour soit le début du fichier (
^
), ou un saut de ligne, suivi d'un#
et un autre saut de ligne\n
.la source
/./
parNR==1
). Je pense que la solution la plus simple serait de terminer le fichier / données - au lieu de commencer - par une#
ligne distincte. Ensuite,\n#\n
pourrait être utilisé comme RS et cela fonctionnerait correctement.NR==1
cela ne fonctionnera pas s'il y a plus de lignes vides plus bas.