나는 주어진 입력 파일을 읽고 "2과목 점수" 평균이 90점을 넘는 학생의 기록을 표시하는 논리/명령을 작성 중입니다.
.txt 파일 입력 -
Deepu#First#Meridian#95#90
Neethu#Second#Meridian#80#75
Sethu#First#DAV#75#70
Theekshana#Second#DAV#80#79
Teju#First#Sangamithra#88#63
Theekshitha#Second#Sangamithra#91#90
산출:
Deepu|First|Meridian|95|90|92.5
나는 다음 명령을 썼다 -
$ awk -F'#' ' { if(($4+$5)/2 >90) {print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" ($4+$5)/2 }} input.txt .
오류가 표시됩니다: F# not found
.
답변1
명령에 오타가 있습니다:
awk -F'#' ' { if(($4+$5)/2 >90) {print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" ($4+$5)/2 }} input.txt
코드 끝에 작은따옴표가 없습니다 awk
. 그것은 다음과 같이 보일 것입니다
awk -F'#' ' { if(($4+$5)/2 >90) {print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" ($4+$5)/2 }}' input.txt
또는 다음과 같이 awk
코드를 작성할 수도 있습니다.
awk -F '#' -v OFS='|' '($4+$5)/2 > 90 { $(NF+1) = ($4+$5)/2; print }' input.txt
OFS
이는 구분 기호로 출력 필드를 자동으로 전달 |
하고 출력 전에 현재 레코드 끝에 평균을 새 필드로 추가하는 데 사용됩니다 (할당은 $(NF+1)
새 필드를 추가합니다. NF
는 현재 레코드의 필드 수이며 $NF
마지막 필드입니다). 필드). 이렇게 하면 출력하려는 모든 필드를 언급할 필요가 없습니다.
또 다른 awk
해결책:
awk -F '#' -v OFS='|' '($(NF+1) = ($4+$5)/2) > 90' input.txt
그러면 새 마지막 필드가 4번째와 5번째 필드의 평균으로 설정되고 새 필드가 90보다 큰 경우 레코드가 인쇄됩니다. 이렇게 하면 평균을 두 번 계산하는 것을 방지하고 다음 print
을 사용합니다.기본 동작만약 그러한 조건이 참이라면.