Валентин Лоскутов пишет:
Здравствуйте.
Имею:
$ cat 1234.txt
1
2
3
4
$ MYVAR=`cat 1234.txt`; echo $MYVAR
1 2 3 4
$ MYVAR=`cat 1234.txt`; echo $MYVAR | tr [\ ] [*]
1*2*3*4
т.е. переносы строк куда-то пропали (строки соединились через пробел).
Как правильно сделать cat (grep и т.п.) файла в переменную, а потом вывести её
в многострочном виде?
А что должно получиться в результате?
вариант
while read aaa
do
echo $aaa
done <1234.txt
не устроит?
Я надеялся, что вывод
$ MYVAR=`cat 1234.txt`; echo $MYVAR
будет аналогичен выводу просто
$ cat 1234.txt
но это не так.
Была мысль сразу задачу описать... :-)
Есть большой файл, по нему делается grep (работает несколько /десятков/ секунд)
в переменную. Это первый этап. Потом делается несколько операций по этой
переменной (подсчёт некоторых строк, какие-то замены и т.п.). Это второй этап.
А потом вывод всего этого безобразия, в том числе и переменной, полученной на
первом этапе. Так вот на первом этапе результатом grep являются несколько
строк, а выводятся они в одну строку, что меня не устраивает. Делать второй
этап по основному файлу (вместо переменной, полученной на первом этапе) очень
долго. И временный файл использовать не хочется.
Вот расширенный пример:
$ cat 1234.txt
1 1
2 1
3 2
4 2
$ MYVAR=`grep 2 1234.txt`; echo $MYVAR
2 1 3 2 4 2
$ MYVAR=`grep 2 1234.txt`; echo $MYVAR | tr [\ ] [*]
2*1*3*2*4*2
Я надеялся получить на выходе
2 1
3 2
4 2
и
2*1
3*2
4*2
соответственно.
До свидания.
Я бы предложил это на перле сделать ;)
На перле работа со списками строк поизячнее выглядит.
while (<STDIN>)
{
chomp;
/regexp/ && push @MYVAR,$_; // вот и фильтрация, и заливка в список
};
foreach (@MYVAR)
{
tr /\ /*/; // вроде так замена делается
print $_."\n"; // вот итерация по списку
}
--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/4b976104.6010...@generali.garant.ua