私はすべてのレコードをループできない理由を知りません。現在は最後のレコードになり、正規化が表示されます。AWKを使用した最小最大正規化
正規化式:
NEW_VALUE =(値 - 分[I])/ -
プログラム
{
for(i = 1; i <= NF; i++)
{
if (min[i]==""){ min[i]=$i;} #initialise min
if (max[i]==""){ max[i]=$i;} #initialise max
if ($i<min[i]) { min[i]=$i;} #new min
if ($i>max[i]) { max[i]=$i;} #new max
}
}
END {
for(j = 1; j <= NF; j++)
{
normalized_value[j] = ($j - min[j])/(max[j] - min[j]);
print $j, normalized_value[j];
}
}
(MAX [I] [I]分)データセット
4 14 24 34
3 13 23 33
1 11 21 31
2 12 22 32
5 15 25 35
電流出力
5 1
15 1
25 1
35 1
要求出力
0.75 0.75 0.75 0.75
0.50 0.50 0.50 0.50
0.00 0.00 0.00 0.00
0.25 0.25 0.25 0.25
1.00 1.00 1.00 1.00
'END'ブロックの' $ j'は、データ・セット内の最後のレコードの 'j'番目のフィールドの値になりますt。 – jas
まず、私はあなたの必要な出力を理解していません。これらの数字はどこから来ていますか?何の分?何の最大値?第二に、END句でNFを参照していますが、実際には意味がありません。 – Rumbleweed
私はawkには本当に新しく、awk言語を理解するのに苦労しています。申し訳ありません。 minとmaxは、私が示したデータセットから計算され、各フィールドの最小値と最大値を計算し、最後にmin-maxアルゴリズムを使用して各フィールドを正規化します。 –