LINUX.ORG.RU

Парсинг файла на bash

 , ,


0

2

Есть файл с блоками текста, которые разделены пробелами. Как можно занести эти блоки текста в массив?

Или какой есть вариант вывода этих блоков текста и подстановка их в переменную по очереди?



Последнее исправление: arcan (всего исправлений: 1)

Тебе не надо ничего заносить в массив в bash. У тебя есть cut/paste/join/awk и много других замечательных вещей, гораздо более приятных в использовании.

legolegs ★★★★★
()

какой есть вариант вывода этих блоков текста и подстановка их в переменную по очереди?

Можно без переменных в цикле передавать вывод sed'а или grep'а по конвейеру

foxy_ant ★★
()
Ответ на: комментарий от anonymous

declare -a myarray=($(cat file))

Хороший вариант

ARR=( $( echo -e "One Two Three\nFour Five Six" ) )
for I in  "${ARR[@]}" ; do echo "-- $I" ; done
-- One
-- Two
-- Three
-- Four
-- Five
-- Six

Kroz ★★★★★
()

Метод неверный. Массивы в баше не для стогигабайтных файлов. И кстати, если блоки текста разделены пробелами, то чем разделены слова внутри текста?

Зачем тебе это надо?

anonymous
()
Ответ на: комментарий от Kroz

read -a ARR <<< «$STR»

Здравствуйте, это забег по граблям?

array=($STR)

Или вообще

array=(one two three)

entefeed ☆☆☆
()

А задача-то какая? Для чего тебе файл в массив заносить?

deadNightTiger ★★★★★
()
Ответ на: комментарий от legolegs

cut/paste/join ... гораздо более приятных в использовании.

arcan, не ведитесь на провокации, вы, скорее всего, идете правильным путем.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)

Решение:

Можно использовать в цикле

1.

mapfile -t myArray < file.txt 
2.
IFS=$'\r\n' GLOBIGNORE='*' command eval  'XYZ=($(cat /etc/passwd))'
$ echo "${XYZ[5]}"
sync:x:5:0:sync:/sbin:/bin/sync

arcan
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.