Mur*_*dia 2 bash shell awk text-processing gawk
我不知道为什么我无法遍历所有记录。目前它用于最后一条记录并为其打印规范化。
New_Value = (value - min[i]) / (max[i] - min[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];
}
}
Run Code Online (Sandbox Code Playgroud)
4 14 24 34
3 13 23 33
1 11 21 31
2 12 22 32
5 15 25 35
Run Code Online (Sandbox Code Playgroud)
5 1
15 1
25 1
35 1
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我会处理文件两次,一次确定最小值/最大值,一次计算归一化值:
awk '
NR==1 {
for (i=1; i<=NF; i++) {
min[i]=$i
max[i]=$i
}
next
}
NR==FNR {
for (i=1; i<=NF; i++) {
if ($i < min[i]) {min[i]=$i}
else if ($i > max[i]) {max[i]=$i}
}
next
}
{
for (i=1; i<=NF; i++) printf "%.2f%s", ($i-min[i])/(max[i]-min[i]), FS
print ""
}
' file file
# ^^^^ ^^^^ same file twice!
Run Code Online (Sandbox Code Playgroud)
产出
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |