awk에서 변수와 함께 패턴을 사용하는 방법

awk에서 변수와 함께 패턴을 사용하는 방법

내 파일은 다음과 같습니다. 백분율이 80을 넘는 학생의 기록을 표시하고 싶습니다.

Studid    StudName     Asp.Net   DBMS     Unix
   1       Ani         75        62       80
   2       George      90        95       82
   3       Jake        45        30       40
   4       Dennie      89        92       90

그래서 다음 코드를 사용했습니다.

awk '(($3+$4+$5)/3)>80 {print}' stud

작동하지만 이 열을 변수에 할당한 다음 출력을 표시하고 싶습니다. 그래서 아래 코드를 시도해 보았지만 작동하지 않습니다.

awk 'total=$3+$4+$5, per=total/3, per>80 {print}' stud

가변적인 솔루션이 있나요?

답변1

다음에서 논리를 변경할 수 있습니다.규칙제청행동

awk '{total=$3+$4+$5; per=total/3; if (per>80) print}' stud
   2       George      90        95       82
   4       Dennie      89        92       90

이것은 산술적으로 열 헤더를 계산하려고 시도한다는 점에 유의하십시오. 에서는 awk숫자가 아닌 필드에 대해 산술을 시도할 때 0으로 처리되기 때문에 "작동합니다". 그러나 예를 들어 변경하는 경우 헤더 행이 인쇄됩니다. .IMHO 에 대한 테스트 더 나은 접근 방식 은 규칙의 작업을 사용하여 헤더 행을 명시적으로 건너뛰는 per<80것입니다.nextNR==1

awk 'NR==1 {next} {total=$3+$4+$5; per=total/3; if (per>80) print}' stud
   2       George      90        95       82
   4       Dennie      89        92       90

또는 제목을 원하면 명시적으로 인쇄하세요.

awk 'NR==1 {print; next} {total=$3+$4+$5; per=total/3; if (per>80) print}' stud
Studid    StudName     Asp.Net   DBMS     Unix
   2       George      90        95       82
   4       Dennie      89        92       90

답변2

노력하다:

awk ' 
# if /^Studid/ is matched move to the next record (row) of the input text
/^Studid/ { next }
{               
    total=$3+$4+$5
    per=total/3
    if (per > 80)  
        print 
}' stud

산출

   2       George      90        95       82
   4       Dennie      89        92       90

관련 정보