Linux에서 Awk로 'next'명령을 사용하는 방법-6 부


Awk 시리즈의 여섯 번째 부분에서는 next 명령을 사용하여 Awk에게 제공 한 나머지 패턴과 표현식을 모두 건너 뛰고 대신 다음 입력 줄을 읽도록 지시합니다.

next 명령을 사용하면 명령 실행에서 시간을 낭비하는 단계가 실행되는 것을 방지 할 수 있습니다.

작동 방식을 이해하기 위해 다음과 같은 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

수량이 20 이하인 식품 항목에 각 줄 끝에 (*) 기호를 표시하는 다음 명령을 실행 해보십시오.

# 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

위의 명령은 실제로 다음과 같이 작동합니다.

  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

그러나 여기에 한 가지 문제가 있습니다. 첫 번째 표현식이 실행될 때 플래그를 지정할 줄은 다음을 사용하여 인쇄됩니다. {printf % st % sn, sh, **; } 그런 다음 같은 단계에서 두 번째 표현식도 확인하여 시간 낭비 요인이됩니다.

따라서 첫 번째 표현식을 사용하여 인쇄 된 이미 플래그가 지정된 행을 인쇄 한 후 두 번째 표현식 인 > 20 을 다시 실행할 필요가 없습니다.

이 문제를 해결하려면 다음과 같이 next 명령을 사용해야합니다.

# 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

<= 20 {printf % st % sn, sh, *를 사용하여 단일 입력 행을 인쇄 한 후; "다음 ; "} 에 포함 된 next 명령은 두 번째 표현식 > 20 {print sh;} 을 건너 뛰는 데 도움이되므로 실행은 수량이 20보다 큰지 확인하는 데 시간을 낭비하지 않고 다음 입력 라인.

다음 명령은 효율적인 명령을 작성하는 것이 매우 중요하며 필요한 경우 언제든지 스크립트 실행 속도를 높이는 데 사용할 수 있습니다. Awk에 대한 입력으로 표준 입력 (STDIN)을 사용하는 것을 살펴볼 시리즈의 다음 부분을 준비하십시오.

이 가이드 방법이 도움이 되었기를 바라며, 아래 댓글 섹션에 댓글을 남겨서 항상 글로 생각을 적을 수 있기를 바랍니다.