awk を使用して、ファイルの各行の数値をそのファイルの最大値で除算します。

awk を使用して、ファイルの各行の数値をそのファイルの最大値で除算します。

次のファイルがあります。

0.0451660231
0.0451660231
0.0527343825
0.3933106065
0.3970947862
0.0489502028
0.3592529595
0.3592529595
0.3592529595
0.3630371392
0.3630371392
0.3668213189
0.4008789659
0.1397705227

各行を最大値に分割したいと思います。

私がやった

cut -f1 -d"," CVBR1_hist | sort -n | tail -1 > maximum
awk -v c=$maximum '{print $1/c}' CVBR1_hist > CVBR1_norm

このエラーがあります。

awk: cmd. line:1: (FILENAME=CVBR1_hist FNR=1) fatal: division by zero attempted

どのように解決すべきかわかりません。誰が私を助けることができますか?

ベストアンサー1

CVBR1_histファイルの内容を数値で並べ替えると、正しいデータが生成されると想定されます。

$ sort -n CVBR1_hist
0.0451660231
0.0451660231
0.0489502028
0.0527343825
0.1397705227
0.3592529595
0.3592529595
0.3592529595
0.3630371392
0.3630371392
0.3668213189
0.3933106065
0.3970947862
0.4008789659

その後、次のコマンド置換を使用して変数に最大値を格納できます。

maximum="$( sort -n CVBR1_hist | tail -n 1 )"

正規化された値は次のように取得できますawk

awk -v m="$maximum" '{ print $1/m }' CVBR1_hist >CVBR1_norm

したがって、欠けている唯一のことは、変数に最大値を正しく保存することです。

おすすめ記事