私は複数の個々のファイル(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