내 파일은 다음과 같습니다. 백분율이 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
것입니다.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