Написание сценария bash для чтения текстового файла чисел в массивы, по столбцу, на Ubuntu

Я пытаюсь написать небольшой скрипт bash на ubuntu 12.04 и иметь небольшой опыт. Нечетная небольшая проблема преобразования текстового файла чисел в массивы. Мне нужны все первые числа, второй и т. Д. В свой собственный массив, потому что я буду выполнять вычисления по числам на основе столбца больше, чем строка, из которой он пришел. Все строки состоят из 5 целых чисел, разделенных пробелами с возвратом в конце каждой строки. Возможно ли существование многомерного массива в bash? Спасибо!

1
задан 16 January 2014 в 01:34

2 ответа

Вот сценарий, он будет хранить числа из текстового файла в два массива 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. И оба находятся в одном каталоге.

2
ответ дан 24 May 2018 в 12:58
Bash поддерживает только одномерные массивы, хотя небольшая обманка позволяет имитировать многомерные.

Этот документ содержит пример двумерного массива. http://tldp.org/LDP/abs/html/arrays.html

Интересно, легче ли использовать другой язык для вашего варианта использования. Похоже, вы растягиваете пределы того, что может сделать bash, тогда как Python, Perl или Ruby будут легко справляться с этой задачей. Я полагаю, что инструмент, который вы будете использовать для последующих «вычислений», будет в значительной степени определять это.

1
ответ дан 24 May 2018 в 12:58

Другие вопросы по тегам:

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