
私は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番目の数値を変数に格納し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
一連の文字全体を取得し、+各アトムの間に を組み込みます。
答え3
ここにawk
解決策があります(行数が偶数であると仮定)
awk '{y=$0; getline x; var += x*y};END{print var}' file.txt