ファイル間算術演算

ファイル間算術演算

次の2つの入力ファイルがあるとしましょう。

> file1
2
3
4

> file2
10
100
1000

計算したい:各行に対してfile1 / file2、結果はfile3です。

> file 3
0.2
0.03
0.004

Bashの分割は次のように達成できます。$((file1_line/file2_line))

ベストアンサー1

ApasteとAの組み合わせはbc単純な算術のための良い選択です。

paste -d/ file1 file2 | bc -l

出力:

.2000000000
.0300000000
.0040000000

もう少し進化した例

いくつかのトリックを使用すると、より洗練されます。以下を含むとしますfile3

6
7
8

次のことができます(file1 + file3) / file2

paste -d'(+)/' /dev/null file1 file3 /dev/null file2

出力:

(2+6)/10
(3+7)/100
(4+8)/1000

pasteこれは、ループが各行の区切り文字のリストを繰り返すために機能します。

0で割る反応

誤ったジョブが送信されると、bc警告は標準エラーとして送信されます。これを別のファイルにリダイレクトし、その内容に基づいてプログラムフローを決定できます。たとえば、次のようになります。

paste -d/ file1 file2 | bc -l > resultfile 2> errorfile
if grep -q 'Divide by zero' errorfile; then
  echo "Error in calculation"
else
  echo "All is well"
fi

またはエラーがある場合:

paste -d/ file1 file2 | bc -l > resultfile 2> errorfile
if ! file errorfile | grep -q empty; then
  echo "Error in calculation"
else
  echo "All is well"
fi

おすすめ記事