합계가 0인 경우 다른 알려진 값을 파일에 인쇄하려면 어떻게 해야 합니까?

합계가 0인 경우 다른 알려진 값을 파일에 인쇄하려면 어떻게 해야 합니까?

데이터 평균을 계산하기 위해 총 레코드 수와 총 누락 파일 수를 추출하는 파일이 많이 있습니다. 누락된 레코드 수가 총 레코드 수와 동일한 파일이 많이 있습니다.

그러면 0이라는 값이 생성되고 파일 데이터의 합은 0이 Settotal.tmp되며 다음과 같은 오류 메시지가 나타납니다 awk: cmd. line:1: (FILENAME=Settotal.tmp FNR=1) fatal: division by zero attempted.

불행히도 이로 인해 내 스크립트가 중단됩니다. 이 문제를 해결하기 위해 여러 가지 방법을 시도했습니다. if 문을 사용하여 문제를 해결할 수 있다고 생각했지만 제대로 작동하지 못했습니다.

이 경우 합계가 0이므로 강제로 전체 레코드 합계인 91과 같도록 값을 설정하려고 합니다. 이 경우 0 오류를 우회하고 출력 Divsortotal.tmp파일을 다음과 같이 만들 수 있습니다.

{유효 데이터와 누락 데이터의 합(-999)(수정값): 91}

입력 파일 ( Validpoints.tmp):

Sum Total Records: 91
Number of missing data: -91
awk -F ':' '{ sum+=$2 }; END { print "sum of valid and missing(-999) data (corrected value):" sum (if $2=0 {print NF==1 $2})}' Validpoints.tmp > Divsortotal.tmp

어떤 도움이라도 대단히 감사하겠습니다. 감사해요

답변1

나는 awk그것을 잘 이해하지 못하기 때문에 귀하의 질문에 있는 코드를 무시하고 합계가 0인 경우 다른 값을 출력하는 것에 대한 귀하의 질문에 대답할 것입니다.

합계가 0인지 확인하려면 다음 명령문에서 테스트할 수 있습니다 if.

if (sum == 0) { ... }

그래서, 당신은 얻을 것이다

awk -F : '{ sum += $2 } END { if (sum == 0) print "sum = 543"; else printf "sum = %d\n", sum }' file

sum = 543합계가 0이 될 때마다 출력되고, 그 외의 경우에는 실제 합계가 출력됩니다.

printf단일 명령문으로 이를 약간 압축한 다음 다음 값을 기반으로 사용하는 값을 선택할 수 있습니다 sum.

awk -F '{ sum += $2 } END { printf "sum = %d\n", ( sum == 0 ? 543 : sum ) }' file

여기서는( sum == 0 ? 543 : sum )삼항 연산자 ?:합계가 0이면 계산은 543이고, 다른 모든 경우에는 실제 합계입니다.

관련 정보