Как дать многомерному массиву значение для каждой ячейки,

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

Я химик, поэтому мой массив должен быть чем-то вроде:

[pe][pH][element][concentration]. 

Таким образом, я смогу построить изменение концентрации для одного элемента с pH и pe .

Поэтому я написал этот скрипт, чтобы сократить свой входной файл и индекс pe , pH и виды, но теперь я застрял. Я не знаю, как это сделать.

  #!/bin/bash inputFile='test.inp' awk '/Distribution of species/ {f=1} /Saturation indices/ {f=0} f' $inputFile > distriPack.inout csplit -z -f distri_ distriPack.inout /Distribution/ {*} sed -i '1,5d; $d' distri_* sed -i 's/^ *//' distri_* cut -d ' ' -f1 distri_* | sort | uniq > especes.inp grep -E "pH = " $inputFile | cut -d '=' -f 2 | cut -d ' ' -f 4 > ph.inp grep -E "pe = " $inputFile | cut -d '=' -f 2 | cut -d ' ' -f 4 > pe.inp declare -a tableVariable=(ipe ipH ies) ipe=0 tablepe=0 for pe in cat "$pe.inp" do if ([ $ipe -eq 0 ] || pePrev=pe) then tablepe=$((tablepe+1)) ipe=$((ipe+1)) pePrev=$pe fi ipH=0 tablepH=0 for pH in cat "$pH.inp" do if ([ $ipH -eq 0 ] || pHPrev=pH ) then tablepH=$((tablepH+1)) > tablepH.inp ipH=$((ipH+1)) pHPrev=$pH fi ies=0 tablees=0 for espece in cat "$espece.inp" do if ([ $ies -eq 0 ] || especePrev=espece ) then # indEspece=0 # for espece in distri_$pe # do # if ([ $indEspece -eq 0 ]) maVariable= grep -E "espece" < distri_10 | cut -d ' ' -f 1 ${tableVariable[ $((ipe)) $((ipH)) $((ies)) ]}=$((maVariable)) # done ies=$((ies+1)) tablees=$((tablees+1)) especePrev=$espece fi done done done 

val = $ {monTableau [$ {i_pe} $ {i_pH} $ {es} $ {pa}]}> monTableau.inp

Я хотел бы иметь что-то вроде: for [pe][pH][specie]=[0][12][15]

IndexTable = концентрация.

Но я не знаю, как сказать в bash for pe = i, pH = j и specie=k и do indexTable[i][j][k]=value вторых столбцов файла Distri_ (показатель pe / pH значение) для строки, соответствующей типу индекса k. Здесь у вас есть «некоторые» строки из моего входного файла:

  >Initial solution 1. \newline >Description of solution >pH = 0.0 >pe = 0.0 >Distribution of species >Species Molality log Activity >H+ 1.1e+00 1.0e+00 >OH- 1.5e-14 9.5e-15 >Am+2 0.0e+00 0.0e+00 >Initial solution 2. pe 0 pH 0.5 >Description of solution >pH = 0.5 >pe = 0.0 >Distribution of species >Species Molality Log Activity >H+ 4.1e-01 3.1e-01 >OH- 4.5e-14 3.1e-14 >Am+2 0.0e+00 0.0e+00 

Я хотел бы получить что-то вроде этого: outputfile_ [pe value] .out, где будут упорядочены данные:

  >Column 1 C2 ..... Cn >Specie\pH 0 n >H+ [H+] at pH=0 [H+] at pH=n 

и т.д

One Solution collect form web for “Как дать многомерному массиву значение для каждой ячейки,”

Я не уверен, хотите ли вы напечатать знак «>» на выходе или если он существует на входе … Пожалуйста, дайте мне отзыв, чтобы я мог внести исправления в скрипт.

Это должно выполняться, если вход и выход точно так, как вы описали:

 #!/usr/bin/awk { # Set the INDEX for each 'Initial Solution' if ($1==">Initial"){ gsub(/\./,"",$3); INDEX=$3;} #Discard lines with 'Species' or 'Description' if (($1==">Description")||($1==">Species")) next; #Remove '>' from the first field gsub(/>/,"",$1) #Set the labels of the rows PH[0]="Column" PE[0]="Specie\\ph" H[0]="H+" OH[0]="OH-" AM[0]="Am+2" #Set other values (pH, pe, etc) if ($1=="pH") PH[INDEX]=$3 if ($1=="pe") PE[INDEX]=$3 if ($1=="H+") H[INDEX]=$2" "$3 if ($1=="OH-") OH[INDEX]=$2" "$3 if ($1=="Am+2") AM[INDEX]=$2" "$3 } # Print each array. END { for (i = 0; i <= INDEX; i++) printf("%s\t",i) printf("\n") for (i = 0; i <= INDEX; i++) printf("%s\t",PH[i]) printf("\n") for (i = 0; i <= INDEX; i++) printf("%s\t",PE[i]) printf("\n") for (i = 0; i <= INDEX; i++) printf("%s\t",H[i]) printf("\n") for (i = 0; i <= INDEX; i++) printf("%s\t",OH[i]) printf("\n") for (i = 0; i <= INDEX; i++) printf("%s\t",AM[i]) printf("\n") } 

Некоторые примечания:

  1. Первая строка (#! / Usr / bin / awk) должна указывать на местоположение awk на вашем компьютере (попробуйте whereis awk в whereis awk строке)
  2. В последнем блоке \ t вставляет вкладку между полями. Вы можете заменить его на \ t \ t на 2 вкладки, запятую ',' или просто пробел '' в соответствии с вашими потребностями.
  3. Сохраните этот скрипт и используйте его, просто выполните: awk -f script.name.awk input.file.inp

    Надеюсь, это решит вашу проблему.

  • дистанционное управление vlc с использованием скрипта через ssh
  • Чтение состояния экрана
  • проанализировать первый столбец вывода команды, получить соответствующее второе значение столбца
  • Ошибка в команде «date -d»
  • Преобразование числа месяцев в месяц
  • Объединение двух разных файлов с условиями
  • трубопровод с недетерминированным выходом
  • Цитирование вывода команды backtick
  • Создание следующего доступного имени файла для шаблона (02-output.log и т. Д.)
  • Инициализировать скрипт для запуска скрипта как конкретного пользователя
  • Печатать содержимое файла и удалять напечатанное содержимое * из файла
  • Interesting Posts

    Запустить команды командной оболочки с правами root без предоставления прав пользователя sudo?

    apt – опция командной строки 'i' не понята в сочетании с другими параметрами

    Копировать команду из истории в приглашение bash

    Как отключить сообщение «Последний неудачный вход в систему» ​​на Centos?

    configure не удалось из-за того, что для получения более подробной информации см. `config.log '

    Как исправить размер fs для логического тома

    Цитирует имена файлов с пробелами в выводе ls на OSX

    Почему gcc показывает `unknown` в Target: x86_64-unknown-linux-gnu в Arch Linux?

    Не удалось загрузить виртуальную машину: Ошибка 13: Неверный или неподдерживаемый исполняемый формат

    Могу ли я установить ubuntu на образ Virtualbox и использовать его где угодно?

    Какова максимальная длина сообщения ssh-banner?

    Проводя результат ls в хвост

    Прочитайте столбец из файла и добавьте конкретный столбец другого файла

    Как awk уникальная строка и печать 2 строк выше

    Что такое сообщение об ошибке tar «Не удается открыть: неверный аргумент»

    Linux и Unix - лучшая ОС в мире.