преобразовать каждый элемент в массиве bash в x количество значащих цифр - PullRequest
0 голосов
/ 12 февраля 2020

Я знаю, что вы можете изменить количество чисел с плавающей запятой в текстовом файле значений следующим образом:

awk '{printf("%.2g",$1)}' filename.txt

, что уменьшит все до двух десятичных цифр. Однако, если у меня есть строка в bash:

echo ${array1}
-82.534592 -82.511200 -82.478912 -82.490959 -82.521393 -82.529610 -82.503510 -82.478218

Как мне преобразовать все значения в массиве, чтобы они содержали х значащих цифр / значений с плавающей запятой? Например, если бы я хотел, чтобы все имели 2 значащие цифры, выглядело бы следующее:

echo ${new_array1}
-82.53 -82.51 -82.48 -82.49 -82.52 -82.53 -82.50 -82.48

1 Ответ

0 голосов
/ 12 февраля 2020

Ваш array1 не является массивом, потому что для просмотра всех элементов в массиве вам нужно будет использовать echo "${array1[@]}". ${array1} печатает только первый элемент массива, если он один.

Вы можете создать массив следующим образом:

array1=(-82.534592 -82.511200 -82.478912 -82.490959 -82.521393 -82.529610 -82.503510 -82.478218)

Для печати всех элементов, округленных до двух цифр после десятичная точка:

$ printf '%.2f\n' "${array1[@]}"
-82.53
-82.51
-82.48
-82.49
-82.52
-82.53
-82.50
-82.48

Чтобы прочитать этот вывод в новый массив:

readarray -t newarray1 < <(printf '%.2f\n' "${array1[@]}")

И проверить новый массив:

$ declare -p newarray1
declare -a newarray1=([0]="-82.53" [1]="-82.51" [2]="-82.48" [3]="-82.49" [4]="-82.52" [5]="-82.53" [6]="-82.50" [7]="-82.48")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...