Использование awk для деления числа в каждой строке файла на максимальное значение в этом файле

Синтаксис должен быть следующим:

openssl x509 -new

Перед x509 нет дефиса

0
24.01.2017, 21:36
3 ответа

Awk выдает ошибку, потому что переменная "c" установлена равной пустой переменной. $maximum еще не установлен.

Вы должны сделать:

awk -v c=`cat maximum` '{print $1/c}' CVBR1_hist > CVBR1_norm

Вот где ваша команда потерпела неудачу.

Лучший способ: не обращаться к временному файлу, а хранить максимальное значение в переменной, как в ответе Кусалананды.

0
28.01.2020, 02:25

Вот однопроходное решение 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
}
1
28.01.2020, 02:25

Предположим, что сортировка содержимого файла 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

Итак, единственное, чего вам не хватало, это правильного хранения максимума в переменной.

2
28.01.2020, 02:25

Теги

Похожие вопросы