Я пытаюсь написать небольшой скрипт bash на ubuntu 12.04 и иметь небольшой опыт. Нечетная небольшая проблема преобразования текстового файла чисел в массивы. Мне нужны все первые числа, второй и т. Д. В свой собственный массив, потому что я буду выполнять вычисления по числам на основе столбца больше, чем строка, из которой он пришел. Все строки состоят из 5 целых чисел, разделенных пробелами с возвратом в конце каждой строки. Возможно ли существование многомерного массива в bash? Спасибо!
Вот сценарий, он будет хранить числа из текстового файла в два массива x и y по вашему желанию,
#!/bin/bash
nl=$(cat "$1" | wc -l)
declare -a x
declare -a y
for i in $(seq 1 $nl)
do
x[i]="$(cat "$1" | awk -v p="$i" '{if(NR==p) print $1}')"
y[i]="$(cat "$1" | awk -v p="$i" '{if(NR==p) print $2}')"
done
#upto this point all the numbers from first and second column of the file are stored
#into x and y respectively. Following lines will just print them again for you.
for it in $(seq 1 $nl)
do
echo "${x[$it]} ${y[$it]}"
done
Не забудьте дать разрешение на выполнение скрипта. [ ! d1]
chmod +x script.sh
Использование
./script.sh numfile.txt
, где я рассматриваю, вы сохраните указанный выше сценарий как script.sh, а ваш текстовый файл, содержащий числа, - numfile.txt. И оба находятся в одном каталоге.
Этот документ содержит пример двумерного массива. http://tldp.org/LDP/abs/html/arrays.html
Интересно, легче ли использовать другой язык для вашего варианта использования. Похоже, вы растягиваете пределы того, что может сделать bash, тогда как Python, Perl или Ruby будут легко справляться с этой задачей. Я полагаю, что инструмент, который вы будете использовать для последующих «вычислений», будет в значительной степени определять это.