我正在尝试使用 bash 解析 html 文件中的某些值。所以我有一个很大的文本文件,其中包含这样的数字
3
2
4
2
我想要做的是获取两行,将两个数字相乘,然后将值存储在变量上并将其添加到总数中。在这种情况下,它将是3*2=6
和4*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
您可以使用paste
和bc
来做您想做的事情:
$ 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