Bash를 사용하여 텍스트 파일의 숫자 목록 합계
이 튜토리얼에서는 Bash 스크립팅을 사용하여 파일의 숫자 목록을 합산하는 여러 가지 방법을 다룹니다. 첫 번째 방법은 paste
명령을 사용하는 것이며, 기존 파일을 사용하는 경우와 stdin
을 사용하여 파일을 읽는 두 가지 경우에 대해 설명합니다.
마지막으로 합계를 구하는 cut
및 awk
명령에 대해 설명합니다.
Bash를 사용하여 텍스트 파일의 숫자 목록 합계
아래에 설명된 방법은 numbers.txt
라는 제목의 입력 파일이 있다고 가정합니다.
숫자.txt
파일:
1
2
3
4
5
6
7
8
9
10
기존 파일 사용
모든 숫자가 간단한 텍스트 파일에 저장되어 있고 각 숫자가 별도의 줄에 있는 경우 Bash에서 다음 명령을 호출하고 합계를 얻을 수 있습니다.
명령:
paste -sd+ numbers.txt | bc
출력:
55
stdin
(표준 입력) 사용
다음 명령은 파일에서 읽고 숫자의 합계를 얻을 수 있습니다.
명령:
cat numbers.txt | paste -sd+ | bc
출력:
55
이 경우 cat numbers.txt
명령을 사용하여 파일에서 읽습니다. 이 명령은 숫자 목록을 반환하는 다른 명령으로 대체할 수 있습니다.
paste
에는 POSIX 정의 사양이 있지만 모든 구현이 동일한 것은 아닙니다. 동일한 출력을 얻으려면 Mac OS에서 다음 명령을 사용해야 합니다.
명령:
<cmd> | paste -sd+ - | bc
잘라내기
명령 사용
여러 열이 있는 텍스트 파일이 있고 특정 열의 합계를 구하려고 한다고 가정합니다. cut
명령을 사용하여 이를 달성할 수 있습니다.
다음과 같이 정의된 numbers.txt
파일이 있다고 가정합니다.
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
아래 명령을 사용하여 각 열을 개별적으로 합산할 수 있습니다.
명령:
cat numbers.txt | cut -d ' ' -f 2 | paste -sd+ | bc -l
-f
뒤의 인수는 합산할 열 번호를 나타냅니다. 이 경우 열 번호의 카운트는 0
이 아니라 1
로 시작한다는 점에 유의해야 합니다.
-f
플래그에 대해 전달된 2
를 추가했으므로 두 번째 열의 합계를 얻습니다.
출력:
10
awk
명령 사용
작성자의 이름을 딴 awk
명령은 이전 방법보다 작업에 더 적합합니다. 측정할 때 awk
는 이전 방법보다 훨씬 더 잘 수행됩니다.
명령:
awk '{s+=$1} END {print s}' numbers.txt
출력:
55
numbers.txt
를 숫자가 포함된 파일 이름으로 바꿀 수 있습니다. 또한 우수한 성능을 부분적으로 담당하는 cat
을 통해 파일 읽기를 우회할 수 있습니다.