2016-08-09 3 views
1

私はファイルを読み込み、すべての要素を0.03で除算したいと思います。精度は重要です。結果を出力ファイルに保存します。awkでどのように分割するのですか?

#!/bin/bash 

var=$(cat 262_V01_C00_R000_TEx_BL_2048H.dat) 
mapfile var < infile 

awk '{for(i=1;i<=NF;i++) $i=$i*100/3}1' infile > output 

しかし、私は

a4.sh: line 4: infile: No such file or directory 

サンプル入力

-9.341203692800e+02 
-9.320539972800e+02 
-9.302205617600e+02 

サンプル出力

-31137.345 
-31068.466 
-31007.352 
+0

'mapfile <'は何をする予定ですか?サンプルの入力/出力も含めます。 – anubhava

+0

@anubhava mapfileでファイルからデータを読み込みます。 –

+0

'mapfile'は標準入力からインデックス付き配列変数に行を読み込むbash 4+のシェル組み込み関数です。 – anubhava

答えて

4

100を乗じと割ると同じです:

awk '$0+0 == $0 { printf "%.3f\n", $0/.03 }' file 
-31137.346 
-31068.467 
-31007.352 
  • $0+0 == $0をするために、この除算を実行することを確認します有効な番号の行のみ。
  • printf "%.3f"は3つの精度ポイントで結果を出力します。
+0

出力ファイルshoudについては、出力を追加するだけですか? –

+0

はい、 'awk '$ 0 + 0 {printf"%.3f \ n "、$ 0/.03}'ファイル>出力 ' – anubhava

+1

なぜ' $ 0 + 0'ですか?入力が '0.000'の場合は出力を生成しませんか? –

1

は、テストデータを作成しました

01 0.03による

格差はあなたがこのawkを使用することができます。3.

$ awk '{for(i=1;i<=NF;i++) $i=$i*100/3}1' file 

814633 811567 251933 1075000 1.08787e+06 
424000 799200 687733 657300 314367 
239467 162433 343867 337533 61533.3 
1.00403e+06 1.02077e+06 1034100 1036500 155133 
+0

私は理解していない、私の最初の行は大丈夫ですか? –

関連する問題