行のペアを取得して乗算する[閉じる]

行のペアを取得して乗算する[閉じる]

bashを使用してhtmlファイルからいくつかの値を解析しようとしています。したがって、次の数字を含む大きなテキストファイルがあります。

3
2
4
2

私が望むのは、2行を取り、2つの数を掛けて、変数に値を格納して合計に追加することです。この場合は と に3*2=6なります4*2=8。だからX=0, X=X+6, X=X+8X=14

答え1

努力する

xargs -n2 < file | while read x y; do ((X+=x*y)); echo $X; done
  • xargs -n2: 数字をペアにグループ化
  • read x y:最初と2番目の数字を変数に保存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行(ダッシュで示されている:)を使用するように指示します- -。 2番目のケースでは、paste文字全体を使用し、+各原子間に1つずつマージします。

答え3

解決策は次のとおりですawk(行数が偶数であると仮定)。

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

関連情報