2012-02-16 14 views
6

Puede alguien sugerir qué hacer si tengo que leer entre dos palabras claves comoLee las líneas entre dos palabras clave

*System_Power 
1 
1.2 
1.8 
2 
*System_Terminate 

En este caso el asnwer sería

1 
1.2 
1.8 
2 

He intentado utilizar awk como

awk '$0 =="*System_Power"    # start printing when 1st field is *System_Power 
$0 != "*System_Terminate"{    # until reach the *System_Terminate 
print; } ' powerSummary > reportedFailure.k # Read from file powerSummary and pipe to reportedFailure.k 
exit 

donde los datos anteriores se encuentran en algún lugar en el medio del archivo powerSummary.

Estaría agradecido por sus correcciones.

Respuesta

5

Esto funcionará para usted:

$ awk '/\*System_Power/{f=1;next}/\*System_Terminate/{f=0}f' infile 
1 
1.2 
1.8 
2 
+0

que trabajó para mí, pero no soy capaz de encontrar una manera general de sorprender. Cada vez que recibo un nuevo formato de solución que es bastante difícil de digerir. Intentando conseguirlo –

2

Se puede utilizar para seleccionar sed trivialmente el texto entre dos líneas que coincidan, pero esto también incluye las líneas que coinciden en sí ... así que eliminamos de manera explícita los:

sed -n '/System_Power/,/System_Terminate/ { 
    /^\*/ d 
    p 
}' < input 

Awk también puede seleccionar el texto entre las líneas que coincidan:

awk '/System_Power/,/System_Terminate/ {print}' < input 

... pero como sed esto incluirá los terminadores de inicio/final. Puedes arreglar esto con awk, pero creo que obtienes una solución más limpia con sed.

+0

¿Hay algún motivo por el que utilice la redirección en lugar de los parámetros sed/awk? Para mí, se pueden escribir 'sed ... input' o' awk ... input' sin '' '. – jfg956

+0

No, no hay motivo. Solo en un filtro de humor. – larsks

1

Aquí hay otro:

awk '$1=="*System_Power",$1=="*System_Terminate" {if (!/System*/) print}' in.txt 
1

Esto podría funcionar para usted:

sed '/^\*System_Power/,/^\*System_Terminate/!d;//d' file 

o esto:

awk '/^\*System_Terminate/{p=0};p;/^\*System_Power/{p=1}' file 
Cuestiones relacionadas