Cómo usar el comando 'next' con Awk en Linux - Parte 6


En esta sexta parte de la serie Awk, analizaremos el uso del comando next , que le indica a Awk que omita todos los patrones y expresiones restantes que haya proporcionado, pero que lea la siguiente línea de entrada.

El comando next lo ayuda a evitar la ejecución de lo que yo llamaría pasos de pérdida de tiempo en una ejecución de comando.

Para entender cómo funciona, consideremos un archivo llamado food_list.txt que se ve así:

Artículos> Artículos de la lista de alimentos

No      Item_Name               Price           Quantity
1       Mangoes                 $3.45              5
2       Apples                  $2.45              25
3       Pineapples              $4.45              55
4       Tomatoes                $3.45              25
5       Onions                  $1.45              15
6       Bananas                 $3.45              30

Considere ejecutar el siguiente comando que marcará los alimentos cuya cantidad es menor o igual a 20 con un signo (*) al final de cada línea:

# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; } $4 > 20 { print $0 ;} ' food_list.txt 

No	Item_Name		Price		Quantity
1	Mangoes			$3.45		   5	*
2	Apples			$2.45              25
3	Pineapples		$4.45              55
4	Tomatoes		$3.45              25 
5	Onions			$1.45              15	*
6	Bananas	                $3.45              30

El comando anterior funciona de la siguiente manera:

  1. First, it checks whether the quantity, fourth field of each input line is less than or equal to 20, if a value meets that condition, it is printed and flagged with the (*) sign at the end using expression one: $4 <= 20
  2. Secondly, it checks if the fourth field of each input line is greater than 20, and if a line meets the condition it gets printed using expression two: $4 > 20

Pero hay un problema aquí: cuando se ejecuta la primera expresión , una línea que queremos marcar se imprime con: {printf% st% sn, sh, **; } y luego, en el mismo paso, la segunda expresión también se verifica, lo que se convierte en un factor de pérdida de tiempo.

Por lo tanto, no es necesario ejecutar la segunda expresión, & gt; 20 nuevamente después de imprimir las líneas ya marcadas que se han impreso usando la primera expresión.

Para resolver este problema, debe usar el comando next de la siguiente manera:

# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; next; } $4 > 20 { print $0 ;} ' food_list.txt

No	Item_Name		Price		Quantity
1	Mangoes			$3.45		   5	*
2	Apples			$2.45              25
3	Pineapples		$4.45              55
4	Tomatoes		$3.45              25 
5	Onions			$1.45              15	*
6	Bananas	                $3.45              30

Después de imprimir una sola línea de entrada con & lt; = 20 {printf% st% sn, sh, *; siguiente ; } , el comando next incluido ayudará a omitir la segunda expresión & gt; 20 {print sh;} , por lo que la ejecución pasa a la siguiente línea de entrada sin tener que perder tiempo en verificar si la cantidad es mayor que 20 .

El comando siguiente es muy importante para escribir comandos eficientes y, cuando sea necesario, siempre se puede usar para acelerar la ejecución de un script. Prepárese para la siguiente parte de la serie en la que analizaremos el uso de la entrada estándar (STDIN) como entrada para Awk .

Espero que esta guía le resulte útil y, como siempre, puede dejar sus pensamientos por escrito dejando un comentario en la sección de comentarios a continuación.