두 열의 평균이 특정 숫자보다 큰 행을 추출하는 awk 스크립트

두 열의 평균이 특정 숫자보다 큰 행을 추출하는 awk 스크립트

나는 주어진 입력 파일을 읽고 "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을 사용합니다.기본 동작만약 그러한 조건이 참이라면.

관련 정보