스크립트 끝을 반영하기 위해 합계를 구하려고 하는데 36962
제대로 작동하지 않습니다. $TOTAL
어떤 제안이 있으십니까? 이것은 학교 프로젝트이고 저는 Bash를 처음 접했습니다.
TOTAL=0
while read p; do
awk '{ if ($1 > 100 ) print TOTAL+=$1}'
echo $TOTAL
done < ipuniq.txt
- 6578
- 6723
- 32735
- 36962
- 에코 -> 0
답변1
이 TOTAL
변수는 쉘 변수이므로 awk
알 수 없습니다. awk
명령 에서 TOTAL
변수는 반복할 때마다 설정되지 않으므로 매번 단일 값으로 재설정된 다음 인쇄됩니다.
awk
게다가 이와 같은 루프에 사용하는 것은 무의미해 보입니다.
awk
다음 패드 1개를 사용하여 직접 이 작업을 수행할 수 있습니다.
awk '$1 > 100 { total+=$1 } END { print total }' ipuniq.txt
루프나 다른 명령이 필요하지 않습니다.
그러나 과제에 bash/shell을 사용해야 하는 경우 다음과 같이 할 수 있습니다.
total=0
while read -r p _; do
((p>100)) && total=$((total+p))
done < ipuniq.txt
echo "$total"
이는 쉘 산술 표현식을 사용하여 값이 p
100보다 큰지 확인하고, 그렇다면 에 추가합니다 total
.
-r
또한 참고: 이 옵션을 명령에 추가한 read
이유는 백슬래시를 문자 그대로 인쇄하기 때문입니다. (사용 사례에는 필요하지 않을 수도 있지만 -r
이 방법을 사용하지 않는 특별한 이유가 없는 한 항상 사용하는 것을 선호합니다.)
또한 원치 않는 입력으로 설정되는 _
것을 방지하기 위해 매개변수 이름을 추가했습니다 . 남은 모든 단어를 마지막 매개변수에 할당하므로 파일에 숫자와 IP가 포함되어 있다고 가정합니다. 예:p
read
1 10.10.10.10
2 10.10.10.11
문제를 포착할 매개변수가 없으면 p
다음과 같이 설정됩니다.
p='1 10.10.10.10'
그 다음에:
p='2 10.10.10.11'