¿Cómo se le dice a awk que use un #
carácter en sí mismo en una línea como separador de registros? El problema es que no se puede decir RS="^#$"
porque ^
coincide con el comienzo del archivo, no con el comienzo de una línea, y RS="#\n"
tampoco funciona porque coincide con los #
caracteres que no están al principio de una línea.
$ data='#
first record, first field
first record, second field
#
second record, first field#
second record, second field
'
Luego imprima el primer 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
La última línea está mal porque no es el primer campo sino el segundo. El resultado previsto fue
first record, first field
second record, first field#
line one#line two#line three
?RS="#"
hace que#\nrecord one\n#\nrecord two
y cada registro consta de múltiples\n
campos separados.RS='#\n'
debe trabajar que yo sepa - a pesar de que tratará la inicial#
como terminación de un registro vacío (es decir, todos losNR
valores serán "off" por uno)Respuestas:
Aquí hay una forma de hacerlo
awk
:El truco consiste en establecer el separador de registro a cualquiera del principio del archivo (
^
), o un salto de línea, seguida de una#
y otra de nueva línea\n
.fuente
/./
conNR==1
). Creo que la solución más fácil sería hacer que el archivo / datos finalicen, en lugar de comenzar, con un#
en una línea separada. Entonces\n#\n
podría usarse como RS y funcionaría correctamente.NR==1
lo que no funcionará si hay más líneas en blanco más abajo.