Для вывода weird

Это мой сценарий:

#!/bin/bash E=0;j=0 for i in ABC do Erray=$(sed -n '/Local net energy/p' log | awk '{print $7}') A[j]=j echo $i = $Erray kJ/mol >> Energy let j=j+1 echo $j $i $Erray ${A[j]} done cat Energy 

Выход:

 1 A 2.692036739192E+03 2 B 2.679751695663E+03 3 C 4.732453844269E+03 A = 2.692036739192E+03 kJ/mol B = 2.679751695663E+03 kJ/mol C = 4.732453844269E+03 kJ/mol 

Это не должно быть так. Порядок вывода «сортируется», а ${A[j]} не появляется.

Редактировать Теперь я знаю, почему вывод сортируется. Я забыл добавить >> Energy после второго echo . Проблема с массивом все еще сохраняется. Мои входные данные большие, я только извлекаю строки, которые имеют значение.

 print energy 2 - 1 end Local net energy (PE 0) = 2.692036739192E+03 kJ/mol Global net ELEC energy = 2.692036739192E+03 kJ/mol 

One Solution collect form web for “Для вывода weird”

В вашем скрипте j монотонно увеличивается – он начинается с 0 и подсчитывается по одному на итерацию цикла. Вы присваиваете значение A[j] в своем цикле, затем вы увеличиваете j , затем пытаетесь распечатать A[j] – но теперь, когда j был увеличен, этот индекс в A еще не установлен, поэтому есть ничего не печатать (расширение переменной пусто). Если вы печатали ${A[j-1]} вы должны видеть вывод.

  • C Shell отменил файл
  • Как путь к исполняемому набору, если скрипт находится в PATH
  • Необходимо получить последний файл с меткой даты за каждый месяц
  • Присвоение вывода команды переменной означает странные результаты
  • Помогите мне понять сложную подстановку команд с помощью {} и нескольких `\ ls`
  • Как изменить содержимое конкретной строки в файле с помощью сценариев оболочки, когда текст в этой строке повторяется много раз в других строках
  • Почему этот скрипт не принимает два аргумента?
  • bash не сравнивает имена файлов с правильно
  • Работа с оператором if
  • Использование grep в инструкции if-else
  • Портативный способ настройки исполняемого файла, вызванного скриптом
  • Linux и Unix - лучшая ОС в мире.