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
위의 명령은 실제로 다음과 같이 작동합니다.
- 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
- 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)을 사용하는 것을 살펴볼 시리즈의 다음 부분을 준비하십시오.
이 가이드 방법이 도움이 되었기를 바라며, 아래 댓글 섹션에 댓글을 남겨서 항상 글로 생각을 적을 수 있기를 바랍니다.