내 파일은 아래와 같습니다. 백분율이 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