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
我不知道如何解決它。誰能幫我?
讓我們假設對文件內容進行
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
因此,您唯一缺少的是將最大值正確儲存在變數中。
這是一個一次性的 awk 解決方案,但它將記憶體中的所有數據儲存在一個數組中。像這樣執行它:
awk -f thisprogram.awk < CVBR1_hist > CVBR1_norm
{ elements[NR]=$1 if ($1 > largest) { largest = $1 } } END { for(i=1; i <= NR; i++) printf "%.10f\n", elements[i]/largest }