텍스트를 필터링할 때 때로는 주어진 조건에 따라 또는 일치할 수 있는 특정 패턴을 사용하여 파일이나 문자열의 특정 줄을 표시하고 싶을 수도 있습니다. awk를 사용하면 이 작업을 수행하는 것이 매우 쉽고 이는 도움이 될 수 있는 awk의 몇 가지 기능 중 하나입니다.
다음 예를 살펴보겠습니다. 구매하려는 음식이 포함된 쇼핑 목록의 이름은 food_prices.list입니다.
$ cat food_prices.list No Item_Name 수량 가격 1 망고 10 $2.45 2 사과 20 $1.50 3 바나나 5 $0.90 4 파인애플 10 $3.46 5 오렌지 10 $0.78 6 토마토 5 $0.55 7 양파 5 $0.45
그런 다음 (*) 기호를 사용하여 단가가 $2보다 큰 식품을 표시하려면 다음 명령을 실행하면 됩니다.
$ awk '/ */$[2-9]/.[0-9][0-9] */ { $1, $2, $3, $4, "*" 인쇄 } / */$[0-1 ]/.[0-9][0-9] */ { 인쇄 }' food_prices.list
단가가 2달러를 초과하는 품목을 인쇄하세요
위 출력에서 망고와 파인애플이 포함된 줄 끝에 (*) 표시가 있는 것을 볼 수 있습니다. 개당 가격을 확인해 보면 실제로 개당 2달러가 넘는다는 것을 알 수 있습니다.
이 예에서는 두 가지 모드를 사용했습니다.
첫 번째 패턴: / */$[2-9]/.[0-9][0-9] */는 단가가 $2보다 큰 음식이 포함된 행을 가져옵니다.
두 번째 패턴: /*/$[0-1]/.[0-9][0-9] */는 식품 단가가 $2 미만인 행을 찾습니다.
위 명령의 역할은 정확히 무엇인가요? 이 파일에는 4개의 필드가 있으며 패턴이 $2보다 큰 식품 단가가 포함된 줄과 일치하면 4개의 필드를 모두 출력하고 줄 끝에 (*) 기호가 표시됩니다.
두 번째 모드는 입력 파일 food_prices.list에 표시된 대로 단가가 2달러 미만인 음식이 포함된 다른 행을 간단히 출력합니다.
이렇게 하면 패턴을 사용하여 2달러가 넘는 음식 항목을 필터링할 수 있습니다. 위 출력에는 문제가 있지만 (*) 기호가 있는 줄은 다른 줄과 같은 형식이 아니므로 출력이 됩니다. 충분히 명확하지 않습니다.
awk 시리즈의 두 번째 부분에서도 같은 문제를 보았지만 다음 두 가지 방법을 사용하여 해결할 수 있습니다.
1 다음과 같이 printf 명령을 사용할 수 있지만 길고 지루합니다.
$ awk '/ */$[2-9]/.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s/n", $1, $2, $3, $4 "*" ; } / */$[0-1]/.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s/n", $1, $2, $3, $4 }' food_prices.list
Awk 및 Printf를 사용하여 프로젝트 필터링 및 출력
2. $0 필드를 사용하세요. Awk는 0 변수를 사용하여 전체 입력 라인을 저장합니다. 위의 문제에 대해 이 방법은 매우 편리하며 간단하고 빠릅니다.
$ awk '/ */$[2-9]/.[0-9][0-9] */ { $0 "*" 인쇄 } / */$[0-1]/.[0-9 ][0-9] */ { 인쇄 }' food_prices.list
Awk 및 변수를 사용하여 항목 필터링 및 출력
결론
그게 전부입니다. awk 명령을 사용하면 패턴 일치를 사용하여 여러 가지 간단한 방법으로 텍스트를 필터링할 수 있으며, 파일의 특정 텍스트 줄이나 문자열을 표시하는 데 도움이 됩니다.
위 내용은 awk를 사용한 텍스트 또는 문자열의 패턴 필터링 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!