2016-10-12 10 views
1

awkで値を計算しようとしていますが、linuxコマンドgetconf CLK_TCKを使って100で割ったときの結果が異なります。Bash Awk部が別の結果を得ました

私の場合、コマンドは常に100を返します。

[[email protected] ~]$ getconf CLK_TCK 
100 

今私は、上記のコマンドの出力値を使用して、いくつかの値を計算しようとしています。

[[email protected] ~]$ echo 26178 4861 | awk '{print ($1+$2)/$(getconf CLK_TCK)}' 
1.18569 

と今100

[[email protected] ~]$ echo 26178 4861 | awk '{print ($1+$2)/100}' 
310.39 

はなぜdiffernt値を得るのですか値を与えますか?

+3

awkはシェルではありません。 Arnold RobbinsのEffective Awk Programming、第4版を読んで、awkの学習を開始してください。 –

答えて

5
コマンドラインから getconfコマンドの出力を渡す

正しい方法:

print ($1+$2)/$0 
26178 4861ある $0に評価され awkコマンド内で直接使用すると、あなたが効果的にやっている

echo 26178 4861 | awk -v val=$(getconf CLK_TCK) '{print ($1+$2)/val}' 
310.39 

$(getconf CLK_TCK)

この演算を実行している:

(26178 + 4861)/26178 => 1.18569 
+0

それは私の問題を解決しました。これの出力値(getconf CLK_TCK)を変数に格納し、後でawk '{print($ 1 + $ 2)/ $ val}'でそれを使用しようとすると、 awkの$ valに$ 0を格納しますか? – Stuxnet78

+1

シェルでこれを使うことができます: 'val = $(getconf CLK_TCK);エコー26178 4861 | awk -v val = "$ val" '{print($ 1 + $ 2)/ val}' ' – anubhava

関連する問題