понедельник, 17 февраля 2014 г.

Чтение файла построчно в массив в Bash

Недавно столкнулся с данной проблемой. Есть файл, в нем построчно написаны имена узлов. Необходимо прочитать этот файл таким образом, чтобы иметь доступ к этому набору данных по индексу.
Самое распространенное решение, которое выдает гугл:
i=0; n=0
cat file.txt |
{
while read s
do
 let "n++";  let "i++"
 var[$i]="$s"
done
}
Но, у меня, криворукого, массив не был виден за пределами фигурных скобок. Однако, спустя некоторое время, было найдено более красивое решение - встроенная в bash функция mapfile, которая полностью выполняет поставленную задачу.
Использование:

mapfile -t hosts < ./hostfile

В массиве hosts у нас все строчки, которые лежат в hostfile, из которых убраны все лишние знаки табуляции и переноса строк (ключ -t).

Комментариев нет:

Отправка комментария