获取线对并相乘

获取线对并相乘

我正在尝试使用 bash 解析 html 文件中的某些值。所以我有一个很大的文本文件,其中包含这样的数字

3
2
4
2

我想要做的是获取两行,将两个数字相乘,然后将值存储在变量上并将其添加到总数中。在这种情况下,它将是3*2=64*2=8。那么X=0, X=X+6, X=X+8那么X=14

答案1

尝试

xargs -n2 < file | while read x y; do ((X+=x*y)); echo $X; done
  • xargs -n2:将数字成对分组
  • read x y:将第一个和第二个数字存储在变量中x并且y
  • ((...))只是 bash 中的算术评估

您将在屏幕上看到总和如何增长。

答案2

您可以使用pastebc来做您想做的事情:

$ paste -d"*" - - <file.txt | paste -d"+" - - | bc
14

分解

在这里我们可以看到paste一次取 2 个,并在它们之间放置一个乘号。

$ paste -d"*" - - <file.txt
3*2
4*2

可以使用类似的方法来包含乘号:

$ paste -d"*" - - <file.txt | paste -d"+"
3*2+4*2

最后,可以将完成的字符串传递给bc执行数学运算。

$ paste -d"*" - - <file.txt | paste -s -d'+' | bc
14

paste上述命令中的用法各不相同。当执行线合并以形成 X*Y 时,我们告诉 Paste 取 2 条线(表示为破折号:)- -。在第二种情况下,我们使用paste整个字符系列并+在每个原子之间合并一个。

答案3

这是一个awk解决方案(假设行数为偶数)

 awk '{y=$0; getline x; var += x*y};END{print var}' file.txt

相关内容