LINUX.ORG.RU

Нарезка текста в переменные


0

2

Здравствуйте. Такая постановка задачи: необхоимо имеющийся текстовый файл разбить на строки и каждую строку забить в отдельную переменную. Линукс оупэн сьюс 11.0 консоль 1.6.6. Сразу говорю, искал, не нашёл (может и плохо искал)

ЗЫ. С башем знак<b>о</b>м достаточно поверхностно.

Вот чтение файла в массив, каждый элемент массива одна строка файла:

#!/bin/sh
LINES=`cat "$1" | wc -l`
MAS=( `cat "$1"` )
echo ${MAS[1]} # первая строка
echo ${MAS[2]} # вторая строка
echo ${MAS[n]} # n-ная строка
kostik87 ★★★★★
()
Ответ на: комментарий от uzbl

for i in $(echo -e 'asdf\nzxcv');

разбить на строки и каждую строку забить в отдельную переменную

Это еще по пробелам разобьёт.

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

Имя файла передаётся в качестве параметра скрипту:

$ chmod +x script.sh
$ ./script.sh "file name"

Или набираете команды в консоли, заменив $1 на имя файла.

kostik87 ★★★★★
()

Через пайп, например.

$ i=0
$ cat ~/file | while read array[$i]; do echo ${array[$i]}; let i++; done

cx ★★
()

Чтобы по строчкам считывать, можно использовать, например, read.

lines=0
text=()
cat "$FILE" | while read text[$lines]; do ((lines++)); done

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

Да, но ТС-то про него вряд ли знает, а у вас в примере он не модифицируется.

tiandrey ★★★★★
()

Я бы на перле написал. Проще некуда.

#!/usr/bin/perl
@file = `cat file.txt`;

Пример использования массива с обрезанием эндлайнов:

for (@file) {
        $_ =~ s/\n//;
	print "$_";
}

Если дальше нужен будет bash - используйте ``.

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

А да, так совсем просто. Слишком уж привык/зациклился на перле я. Хотя неудобств не испытываю =)

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