
Tengo un archivo parecido a este:
nombre del nombre: danan
CN: Danian
CN: danian1
nombre del nombre: danian2
CN: danian2
nombre del nombre: danian3
CN: danian3
CN: danian4
todo lo que quiero hacer es grep el patrón "dn:" e imprimir solo las 2 líneas siguientes, pero cuando ejecuto grep -A 2 "dn:" el resultado es todo lo que está en el archivo, solo quiero imprimir las 2 líneas siguientes no la siguiente 1 línea
Respuesta1
Esto podría funcionar:
$ awk -v RS="dn: " -v FS="\n" -v ORS="" 'NF>3 {print "dn:",$0}' input.txt
Lo definimos dn:
como separador de registros. Los campos de un registro están delimitados por un carácter de nueva línea \n
.
En caso de que tenga dos líneas después de una línea que comienza con dn:
, antes de que un nuevo registro comience con dn:
, tendrá 3 veces un "\n" que conducirá a 4 campos en el registro. Por eso comprobamos si hay más de 3 campos en el registro ( NF>3
). Si ese es el caso, imprimimos el registro completo, pero debemos anteponer el archivo dn:
.
Tenga en cuenta que NF>3
encontrará todos los registros con más de dos líneas siguientes en un registro. Si desea solo aquellos con dos exactos, cámbielo a NF==3
.
Si los bloques están delimitados por una línea en blanco (como parece en uno de sus comentarios posteriores), utilice esto en su lugar:
$ awk -v RS="\n\n" -v FS="\n" -v ORS="\n\n" 'NF>2 {print $0}' input.txt
Respuesta2
Ejecuto el comando anterior y funciona perfectamente,
awk -v RS="\n\n" -v FS="\n" -v ORS="\n\n" 'NF>2 {print $0}'
Los bloques delimitados están en blanco, funciona perfectamente.