取得線對並相乘

取得線對並相乘

我正在嘗試使用 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

相關內容