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
head
awk를 사용하여 이 작업을 수행할 수도 있으므로 각 파일이 필요하지 않습니다 .
gawk '{count += 1; sum += $1; nextfile}
END {printf "count: %d\t sum: %d\n", count, sum}' *
첫 번째 규칙은 개수와 합계를 증가시킨 후 다음 파일로 이동하여 각 파일의 첫 번째 줄을 제외한 모든 줄을 무시합니다. 에서는 END
숫자를 인쇄합니다.
nextfile
GNU이므로 다른 버전에서는 작동하지 않을 수 있습니다 awk
. 또 다른 옵션은 첫 번째 줄에서만 명시적으로 작동하는 것입니다.
awk 'FNR == 1 {count += 1; sum += $1}
END {printf "count: %d\t sum: %d\n", count, sum}' *
그러나 나머지 줄에서는 아무 작업도 수행하지 않더라도 파일을 완전히 읽습니다.