Bashを使用して2つのtxtファイルから数字を追加するには?

Bashを使用して2つの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

関連情報