![합계가 0인 경우 다른 알려진 값을 파일에 인쇄하려면 어떻게 해야 합니까?](https://linux55.com/image/189911/%ED%95%A9%EA%B3%84%EA%B0%80%200%EC%9D%B8%20%EA%B2%BD%EC%9A%B0%20%EB%8B%A4%EB%A5%B8%20%EC%95%8C%EB%A0%A4%EC%A7%84%20%EA%B0%92%EC%9D%84%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%9D%B8%EC%87%84%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
데이터 평균을 계산하기 위해 총 레코드 수와 총 누락 파일 수를 추출하는 파일이 많이 있습니다. 누락된 레코드 수가 총 레코드 수와 동일한 파일이 많이 있습니다.
그러면 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이고, 다른 모든 경우에는 실제 합계입니다.