루프에 대한 합계 및 계산

루프에 대한 합계 및 계산

5개의 파일이 있는데 각 파일의 첫 번째 줄에 숫자가 있습니다.

파일 수(count)와 파일에 있는 숫자의 합계를 계산할 수 있는 for 루프가 포함된 bash 스크립트를 작성하려고 합니다.

지금까지 시도한 내용은 다음과 같습니다.

for file in $* 
do
        $[head -1 $file] 
        echo $(head -1) 
done

합계와 계산 요소를 결합하는 방법을 아직 잘 모르겠습니다.

답변1

나는 당신이하고 싶은 일이 다음을 통해 달성 될 수 있다고 생각합니다.

#!/bin/bash
sum=0
count=0
for file in "$@"
do
        number=$(head -1 "$file")
        count=$((count + 1))
        sum=$((sum + number))
done
echo "The sum of the $count file(s) is: $sum"

사용 중인 파일의 합계를 저장하기 위해 변수를 추가하기만 하면 됩니다 sum. 그런 다음 루프가 실행될 때마다 count증가합니다 . count또한 - 변수 number에 파일 행의 시작 부분을 추가합니다 sum.

답변2

headawk를 사용하여 이 작업을 수행할 수도 있으므로 각 파일이 필요하지 않습니다 .

gawk '{count += 1; sum += $1; nextfile} 
      END {printf "count: %d\t sum: %d\n", count, sum}' *

첫 번째 규칙은 개수와 합계를 증가시킨 후 다음 파일로 이동하여 각 파일의 첫 번째 줄을 제외한 모든 줄을 무시합니다. 에서는 END숫자를 인쇄합니다.

nextfileGNU이므로 다른 버전에서는 작동하지 않을 수 있습니다 awk. 또 다른 옵션은 첫 번째 줄에서만 명시적으로 작동하는 것입니다.

awk 'FNR == 1 {count += 1; sum += $1} 
      END {printf "count: %d\t sum: %d\n", count, sum}' *

그러나 나머지 줄에서는 아무 작업도 수행하지 않더라도 파일을 완전히 읽습니다.

관련 정보