2016-07-20 2 views
1

Я использую скрипт bash, который вызывает скрипт Perl для выполнения задания. Результаты этой работы затем добавляются к массиву в bash и суммируются. Распечатывается суммирование после каждого вызова сценария Perl. После того, как скрипт работает некоторое время, он прекращает печать суммы без сообщения об ошибке.Large Bash Arrays или Log Out Termination

Пример:

for i in {1..1999}; 
do 
    fi="$(printf "%06d" $i)_sys6_uw_lipid_data.pdb" 
    r_sq_value=$(perl r_value.pl "$fi") 
    all_r_sq_values+=($r_sq_value) 

sum=$(
awk 'BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}' "${all_r_sq_values[@]}" 
) 

echo "$sum <--- SUM" 

done 

Скрипт работает просто отлично на некоторое время, но после того, как долгое время сценарий останавливает печать сумму.

Пример:

... skipping ... 
5.20884e+06 <--- SUM 
5.22297e+06 <--- SUM 
5.23754e+06 <--- SUM 
5.25246e+06 <--- SUM 
5.26714e+06 <--- SUM 
5.28179e+06 <--- SUM 
5.29737e+06 <--- SUM 
<--- SUM 
<--- SUM 
<--- SUM 
<--- SUM 
<--- SUM 

Без ошибки я не уверен, если это из-за сценария или потому что компьютер прекращает работу из-за этого идти спать. Все файлы данных, которые он читает, полны и работают индивидуально с Perl-скриптом.

Любое предложение или комментарии оценены.

Спасибо

+1

'fi' не кажется, хорошее имя переменной (см if..fi) –

+0

У меня есть правильна«фи»переменной, но сценарий по-прежнему имеет ту же проблему. –

+0

Я подозреваю, что вы достигли предела в списке параметров awk. Достаточно легко добавить все элементы массива без использования awk, и я предлагаю вам сделать это вместо кода оболочки. – Borodin

ответ

0

Изменить это:

for i in {1..1999}; 
do 
    fi="$(printf "%06d" $i)_sys6_uw_lipid_data.pdb" 
    r_sq_value=$(perl r_value.pl "$fi") 
    ((all_r_sq_values += ($r_sq_value))) 

sum=$(
awk 'BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}'  "${all_r_sq_values[@]}" 
) 

echo "$sum <--- SUM" 

done 
+2

Было бы очень полезно, если бы вы выделили, какие изменения вы внесли и объяснили, почему вы думали, что они помогут – Borodin

+0

@Borodin, как мне выделить? – michael501