如何使用 Bash 从两个 txt 文件中添加数字?

OhL*_*ook 8 bash shell-script text-processing numeric-data

我有一个 txt 文件,其中包含一些这样的数字:

1  
2  
3  
4  
5  
Run Code Online (Sandbox Code Playgroud)

我还有另一个包含相同行数的 txt 文件,但有其他数字:

6  
7   
8  
9  
10
Run Code Online (Sandbox Code Playgroud)

我想把它们加在一起,即1+6、2+7、3+8等等。我该怎么写脚本?

顺便说一句,到目前为止,我已经得到了各种各样的答案,只有在我在我的文件上尝试过它们之后,我才意识到某些方法无法处理小数。我的一些文件包含小数,我需要准确,所以如果你想添加一个答案,你能展示一个可以准确计算小数的方法。谢谢。

Jef*_*ler 13

沿着paste线,但做数学bc

$ paste -d+ file1 file2 | bc
7
9
11
13
15
Run Code Online (Sandbox Code Playgroud)

中间结果(之前bc):

$ paste -d+ file1 file2
1+6
2+7
3+8
4+9
5+10
Run Code Online (Sandbox Code Playgroud)

对于更以 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
Run Code Online (Sandbox Code Playgroud)

...对于非整数,结合以下想法:

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
Run Code Online (Sandbox Code Playgroud)

  • 这表明您有一个带有 CRLF 行结尾的 DOS/Windows 格式文件,而不仅仅是 CR。以不同方式传输或重新保存,或后期处理:https://unix.stackexchange.com/a/192093/117549 (4认同)

jim*_*mij 11

这是许多工具可以解决的基本任务;paste+awk组合似乎非常方便:

$ paste file1 file2 | awk '{$0=$1+$2}1'
7
9
11
13
15
Run Code Online (Sandbox Code Playgroud)


iru*_*var 6

一个awk-only溶液

awk '(getline a <"file2") <= 0 {exit}; {print $0 + a}' file1
Run Code Online (Sandbox Code Playgroud)