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으로 처리되기 때문에 "작동"하지만, 예를 들어 다음과 같은 경우 헤더 줄이 인쇄됩니다. 테스트를 로 변경했습니다 per<80. 더 나은 IMHO는 next규칙에 대한 작업을 사용하여 헤더 줄을 명시적으로 건너뛰는 것입니다.NR==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

관련 정보