Как сохранить вывод функции в массив

Чтобы ответить на ваш вопрос, я копирую и вставляю некоторые из apache2.confнастроек моего сервера Apache, который обеспечивает шифрование класса A на моей странице с SSL-сертификатами Let's Encrypt:

#Required modules
LoadModule socache_shmcb_module /usr/lib/apache2/modules/mod_socache_shmcb.so
LoadModule ssl_module           /usr/lib/apache2/modules/mod_ssl.so

#SSL settings
SSLCipherSuite ECDHE:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!RC4
SSLHonorCipherOrder on
SSLRandomSeed connect file:/dev/urandom 32
SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl(512000)
SSLSessionCacheTimeout 86400
SSLStaplingCache shmcb:${APACHE_RUN_DIR}/ocsp(128000)
SSLUseStapling on

Кроме того, вы можете увидеть этот ответ для усиления SSLCipherSuite.

0
02.01.2020, 21:29
2 ответа

Проблема с вашим частично работающим решением заключается в том, что вы каждый раз сохраняете одно значение из суммы одного столбца во весь массив, что удаляет предыдущие значения.

Решение состоит в том, чтобы вставлять значения в массив одно за другим, а не использовать команду mapfile, которая требует все значения в одной строке ввода:

FILE_NAME="$1"
COLUMN_NAME="$2"

alpha=( $(awk -F"|" 'NR==1{for(i=1;i<=NF;i++){if ($i ~ /'$COLUMN_NAME'/){print i;}}}' $FILE_NAME) )

declare -a array=()

n=0

for each in "${alpha[@]}"
do
        array[n]="$(awk -F'"?\\|"?' '{T+=$('$each')} END { printf "%.2f\n", T }' $FILE_NAME)"
        ((n=n+1))
done

echo "${array[@]}"

Выполнение этого дает:

$ bash test.sh demo.txt 'SAL|COL|PER|TAG'
3.58 40.68 6.52 6.88
0
28.01.2020, 02:58

Чтобы получить вывод demoв массив, вы можете использовать подстановку команд

declare -a array1=( $(demo) )

и замените вызов demoв вашем скрипте строкой выше.

PS :Если входной файл имеет фиксированное (и предварительно -определенное )количество столбцов, может быть проще суммировать столбцы непосредственно в элементы массива (и, возможно, быстрее, потому что вы не нужно будет читать$FILENAME#столбцов + 1 раз ).

0
28.01.2020, 02:58

Теги

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