直線のペアを取得して乗算する

直線のペアを取得して乗算する

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

3
2
4
2

私がやりたいのは、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: 最初の数値と2番目の数値を変数に格納しxy
  • ((...))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一連の文字全体を取得し、+各アトムの間に を組み込みます。

答え3

ここにawk解決策があります(行数が偶数であると仮定)

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

関連情報