Unix awkパイプから10進数をエクスポートする

Unix awkパイプから10進数をエクスポートする

私は複数の個々のファイル(subj_id)を繰り返し、指定された行に$ 4の値を印刷するスクリプトを調整しています。

テキストファイルに行が含まれています。

# Measure Brain, ICV, Brain Volume, 1118718.609121, mm^3

私のスクリプトには、数字1118718をエクスポートする次の行が含まれています。

printf "%g," `cat ${subj_id}/stats/aseg.stats | grep ICV | awk -F, '{print $4}'` > BrainVol.csv

私の値はエクスポートA) 666666.012345時にB) 7777777.012345スクリプトがA)うまく実行されますが、エクスポートした場合666666はそうではありません。出力の小数点以下の桁数を指定するにはprintfを使用する必要があると思いましたが、うまくいきませんでした。B)7777780'{printf "%.2f\n",$4}'

申し訳ありません。基本的ですが、このパイプラインに小数指定子を含める正しい順序は何ですか(問題の場合)。

これはbashスクリプトです。私はMac OS X 10.7.5を実行しています。

どんな助けでも大変感謝します。

ベストアンサー1

以下は私にとって効果的でした。

awk -F, '/ICV/ {printf "%.2f\n", $4}' ${subj_id}/stats/aseg.stats

次のソースを使用する場合:

# Measure Brain, ICV, Brain Volume, 1118718.609121, mm^3
# Measure Brain, ICV, Brain Volume, 7777777.012345, mm^3
# Measure Brain, ICV, Brain Volume, 666666.012345, mm^3

次の結果が表示されます。

1118718.61
7777777.01
666666.01

@glennjackmanが指摘したように、次のようにして行のどこにでもパターンを一致させるのではなく、予想されるフィールドが私たちが望む正確な文字列であることを確認して、一致をより具体的にすることができます。

awk -F, '$2 == " ICV" {printf "%.2f\n", $4}' ${subj_id}/stats/aseg.stats

または、スペースを柔軟に使用するには、そのフィールドにパターンを一致させるだけです。

awk -F, '$2 == /^[[:space:]]*ICV[[:space:]]*$/ {printf "%.2f\n", $4}' ${subj_id}/stats/aseg.stats

おすすめ記事