Tengo un archivo de entrada FILE1.TXT como se muestra a continuación.
11 id1
12
13 AGE = 20
14 NAME = NAME1
15
16 id2
17
18 AGE = 30
19 NAME = NAME2
.
.
.
110 idXYZ
111
112 AGE = AGEXYZ
113 NAME = NAMEXYZ
114
115 idZZZ
116
Quiero buscar en todos los campos que pertenecen a un Id en particular y obtener el valor de NAME
Logré recorrer cada Id y formé el siguiente comando para cada Id según sea necesario.
sed -n '/11/,/14/p' FILE1.TXT | grep NAME | awk -F "= " '{print $2}'
El problema aquí es que obtengo la salida NAME1 , además de eso, también obtengo NAMEXYZ .
¿Qué se debe cambiar para que solo obtenga NAME1 pero no NAMEXYZ ?
Como solución alternativa, los siguientes comandos funcionan.
sed -n '/11/,/14/p' FILE1.TXT | grep NAME | awk -F "= " '{print $2}'|head -1
¿Hay algún 'interruptor' o me estoy perdiendo algo?
^(random no of spaces)11
?sed -n '/^\s*11 /,/^\s*14 /p'
sed -n '/^11 /,/^14 /p' | awk '/NAME/{print $NF}'
¿has probado esto?Use límites de palabras:
coincidiría
NAME1
y noNAME1XYZ
oXYZNAME1
.Similar,
no coincidiría con las líneas que contienen
111
y142
.EDITAR: Parece que los números en el archivo de entrada son en realidad números de línea. Si ese es el caso, simplemente podría decir:
para obtener las líneas deseadas.
fuente
NAME
entre las líneas 11 y 14. Entonces, ¿por qué estásed
mirando111
y114
? ¿Cómo hacer que no se vea en el medio111
y114
?sed
expresión.grep
con-w
bandera? no es asi-w
sería equivalente. Porsed
ejemplo,-w
es ligeramente diferente.Puedes usar AWK
Esto buscará líneas entre 13 y 17, luego buscará Nombre y, si coincide, imprimirá la última palabra de
Name = LastWord
fuente
$
antesNR
y eso causó el error.No necesita ninguna otra herramienta para esto,
sed
lo manejará fácilmente por completo.Eso debería proporcionarle solo la primera secuencia de caracteres que no sean espacios en blanco después de la frase "NAME =" para cada línea en la que se encuentra esa frase entre las líneas 11 y 14 de cualquier archivo de entrada
sed
.fuente
sed no es la herramienta adecuada para este trabajo. Use awk donde puede especificar la identificación que está buscando e imprima el siguiente NOMBRE que aparece.
fuente
versión genérica no basada en el número de línea sino en la referencia de identificación
fuente
Puede imprimir las líneas que contienen patrones coincidentes utilizando sed de la siguiente manera:
-n
- estas opciones desactivan esta impresión automática, y sed solo produce resultados cuando se le indica explícitamente a través delp
comando.p
- impresiónfuente