ejemplo.txt está debajo
Restaurant: McDonalds
City: Miami
State: Florida
Address: 123 Biscayne Blvd
Phone: 911
Restaurant: 5 guys
City: Atlanta
State: Georgia
Address: 123 Peachtree Rd
Phone: 911
Restaurant: KFC
City: NYC
State: NY
Address: 123 Madison Square
Phone: 911
Estoy usando el script bash y digamos que quiero buscar un restaurante por su nombre en el archivo de arriba. Solicite al usuario que ingrese el nombre del restaurante y debe imprimir la información sobre ese restaurante (5 líneas).
awk '/McDonalds/> /KFC/' example.txt
Sé que la línea de código anterior imprimirá toda la línea que coincida con el patrón "McDonalds" y "KFC", pero eso solo imprimirá la primera línea del archivo de texto pero no el resto de la información sobre ese restaurante. ¿Cómo puedo decirle que imprima toda la información (5 líneas) solo con la entrada del usuario del nombre del restaurante?
Utilizando
sed
:Explicación
Esta es una
sed
función básica , puede consultar SCRIPTS ÚTILES DE UNA LÍNEA PARA SEDfuente
El comando anterior obtendrá e imprimirá las 4 líneas consecutivas junto con la línea actual porque se introdujo en un bucle for. El patrón de búsqueda
$2=="KFC"
ayudará a obtener una línea particular de varias líneas.fuente
Otra posible solución:
fuente
{if($1=="KFC")print $0}
puede condensar a solo$1 == "KFC"
, ya que la acción predeterminada para una condición verdadera es imprimir el registro.Es suficiente imprimir desde la línea que contiene el nombre que desea, hasta la última línea que contiene la palabra
Phone
(suponiendo, por supuesto, que todas las entradas sigan el mismo patrón y siempre tendrán unPhone
registro final)Si quisiéramos complicarlo un poco, podríamos imprimir exactamente 5 líneas después del partido, así:
La
stop
variable no se establecerá, porNR<=stop
lo que no imprimirá nada, hasta que/McDonalds/{stop=NR+5;}
parte realmente establezca la variable, y eso solo sucederá cuando encontremos la coincidencia.fuente