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

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

1
задан 04.05.2020, 23:29

2 ответа

Bash поддерживает только одномерные массивы, хотя небольшая хитрость позволяет имитировать многомерные.

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

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

1
ответ дан 04.05.2020, 23:30

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

Не забудьте дать разрешение на выполнение скрипта.

chmod +x script.sh

Использование

./script.sh numfile.txt

, где я рассматриваю, вы сохраните вышеуказанный скрипт как script.sh, а ваш текстовый файл, содержащий числа, будет numfile.txt. И оба находятся в одном каталоге.

2
ответ дан 04.05.2020, 23:30

Теги

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