Bash를 사용하여 두 개의 txt 파일에서 숫자를 추가하는 방법은 무엇입니까?

Bash를 사용하여 두 개의 txt 파일에서 숫자를 추가하는 방법은 무엇입니까?

다음과 같은 숫자가 포함된 txt 파일이 있습니다.

1  
2  
3  
4  
5  

줄 수는 같지만 숫자가 다른 또 다른 txt 파일이 있습니다.

6  
7   
8  
9  
10

1+6, 2+7, 3+8 등을 함께 추가하고 싶습니다. 스크립트는 어떻게 작성하나요?

그런데, 나는 지금까지 다양한 답변을 얻었고, 내 파일에서 답변을 시도한 후에야 일부 메소드가 소수를 처리하지 않는다는 것을 깨달았습니다. 내 파일 중 일부에는 소수가 포함되어 있어 정확해야 합니다. 답변에 추가하고 싶다면 소수를 정확하게 계산하는 방법을 보여주실 수 있나요? 감사해요.

답변1

paste라인을 따라 다음과 같이 수학을 수행합니다 bc.

$ paste -d+ file1 file2 | bc
7
9
11
13
15

중간 결과( 이전 bc):

$ paste -d+ file1 file2
1+6
2+7
3+8
4+9
5+10

보다 bash 중심 솔루션을 위해 file2에 최소한 file1만큼 많은 줄이 있다고 가정합니다.

mapfile -t file1 < file1
mapfile -t file2 < file2
for((i=0; i < ${#file1[@]}; i++))
do
  printf '%d\n' $((file1[i] + file2[i]))
done

...정수가 아닌 경우 다음 아이디어를 결합하세요.

mapfile -t file1 < file1
mapfile -t file2 < file2
for((i=0; i < ${#file1[@]}; i++))
do
  printf '%d + %d\n' "${file1[0]}" "${file2[0]}" | bc
done

답변2

이는 다양한 도구로 해결할 수 있는 기본 작업입니다. paste+ awk조합이 특히 편리해 보입니다.

$ paste file1 file2 | awk '{$0=$1+$2}1'
7
9
11
13
15

답변3

유일한 awk해결책

awk '(getline a <"file2") <= 0 {exit}; {print $0 + a}' file1

답변4

좋아, 이것은 약간 난해하지만 bash 산술 paste도 있습니다 sed.

$ # debug
$ paste -d+ <(sed 's/\(.*\)/echo $((\1/' file1) <(sed 's/\(.*\)/\1))/' file2)
echo $((1+6))
echo $((2+7))
echo $((3+8))
echo $((4+9))
echo $((5+10))

$ eval "$(paste -d+ <(sed 's/\(.*\)/echo $((\1/' file1) <(sed 's/\(.*\)/\1))/' file2))"
7
9
11
13
15

관련 정보