URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1347
[ Назад ]

Исходное сообщение
"BASH. Как читать файл построчно?"

Отправлено teebot , 03-Фев-03 16:21 
Здравствуйте.

Появилась необходимость читать содержимое файла построчно. В строке присудствуют пробелы поэтому так
elist=$(/bin/cat /tmp/robot/ea)
for str in $elist;
do
...
done
не получается, берутся отдельные слова.

Как читать строки целиком, независимо от того етсь там пробелы или другие символы или нет?


Содержание

Сообщения в этом обсуждении
"RE: BASH. Как читать файл построчно?"
Отправлено zlinuxan , 03-Фев-03 18:04 
Попробуй делать тож'самое на перле.
Синтаксис почти один в один и есть такая штука, как split, с которой ты хоть пробелы в плюсики, хоть наоборот можешь вертеть %)

Кстати, слышал слух, что в линухах могут вообще shell сотоварищи заменить перлом.
Во как!


"RE: BASH. Как читать файл построчно?"
Отправлено teebot , 03-Фев-03 18:22 
>Попробуй делать тож'самое на перле.
>Синтаксис почти один в один и есть такая штука, как split, с
>которой ты хоть пробелы в плюсики, хоть наоборот можешь вертеть %)
>
>
>Кстати, слышал слух, что в линухах могут вообще shell сотоварищи заменить перлом.
>
>Во как!

Ты знанешь пробовал, но там другая проблема (а может вовсе и не проблема) мне надо вызвать скрипт.
прога такая:
open (FILE, "имя_файла");
@lines=<FILE>;
close (FILE);
$kol=@lines;
for ($i=0;$i<$kol;i++)
{
  #тут вызывается скрипт которому передается результат чтения файла - строка
}
так вот сколько бы повторов не было, цикл вываливается после первого.


"RE: BASH. Как читать файл построчно?"
Отправлено hellman , 03-Фев-03 18:31 
>>Попробуй делать тож'самое на перле.
>>Синтаксис почти один в один и есть такая штука, как split, с
>>которой ты хоть пробелы в плюсики, хоть наоборот можешь вертеть %)
>>
>>
>>Кстати, слышал слух, что в линухах могут вообще shell сотоварищи заменить перлом.
>>
>>Во как!
>
>Ты знанешь пробовал, но там другая проблема (а может вовсе и не
>проблема) мне надо вызвать скрипт.
>прога такая:
>open (FILE, "имя_файла");
>@lines=<FILE>;
>close (FILE);
>$kol=@lines;
>for ($i=0;$i<$kol;i++)
>{
>  #тут вызывается скрипт которому передается результат чтения файла - строка
>
>}
>так вот сколько бы повторов не было, цикл вываливается после первого.

не знаю почему может вываливаться, но помоему свот такой код приятней.
open(FILE, "< /tmp/file");
foreach my $line (<FILE>) {
&some_sub($line);
}
close(FILE);

ну или
open(FILE, "< /tmp/file");
my @file = <FILE>;
close(FILE);
foreach my $line (@file) {
&some_sub($line);
}


где ессесно функция some_sub что то делает со строкой.



"RE: BASH. Как читать файл построчно?"
Отправлено teebot , 03-Фев-03 18:58 
>>>Попробуй делать тож'самое на перле.
>>>Синтаксис почти один в один и есть такая штука, как split, с
>>>которой ты хоть пробелы в плюсики, хоть наоборот можешь вертеть %)
>>>
>>>
>>>Кстати, слышал слух, что в линухах могут вообще shell сотоварищи заменить перлом.
>>>
>>>Во как!
>>
>>Ты знанешь пробовал, но там другая проблема (а может вовсе и не
>>проблема) мне надо вызвать скрипт.
>>прога такая:
>>open (FILE, "имя_файла");
>>@lines=<FILE>;
>>close (FILE);
>>$kol=@lines;
>>for ($i=0;$i<$kol;i++)
>>{
>>  #тут вызывается скрипт которому передается результат чтения файла - строка
>>
>>}
>>так вот сколько бы повторов не было, цикл вываливается после первого.
>
>не знаю почему может вываливаться, но помоему свот такой код приятней.
>open(FILE, "< /tmp/file");
>foreach my $line (<FILE>) {
> &some_sub($line);
>}
>close(FILE);
>
>ну или
>open(FILE, "< /tmp/file");
>my @file = <FILE>;
>close(FILE);
>foreach my $line (@file) {
> &some_sub($line);
>}
>
>
>где ессесно функция some_sub что то делает со строкой.

что самое интересное нужно вызывать не перловскую процедуру, а BASH скрипт корорый написан до меня.
делаю exec "путь_и_имя_скрипта";
он отрабатывает, а цикл уже не продолжается.


"RE: BASH. Как читать файл построчно?"
Отправлено zlinuxan , 04-Фев-03 04:11 

>что самое интересное нужно вызывать не перловскую процедуру, а BASH скрипт корорый
>написан до меня.
>делаю exec "путь_и_имя_скрипта";
>он отрабатывает, а цикл уже не продолжается.
Так вызывай его в цикле типа вообще тупого
my $x=1;
       while ($x){
         exec_до _посинения;
                  }


"RE: BASH. Как читать файл построчно?"
Отправлено teebot , 04-Фев-03 09:52 
>
>>что самое интересное нужно вызывать не перловскую процедуру, а BASH скрипт корорый
>>написан до меня.
>>делаю exec "путь_и_имя_скрипта";
>>он отрабатывает, а цикл уже не продолжается.
>Так вызывай его в цикле типа вообще тупого
> my $x=1;
>       while ($x){
>         exec_до _посинения;
>            
>      }

Спасибо за совет, но задача состоит из двух частей.
1) Читать из файла построчно
2) Прочитанное передавать BASH скрипту.

зачем же мне бесконечный while если нужно ровно столько сколько строк в файле.

Видимо надо иначе подойти к решению проблемы. Наверное я выбрал не самы лучший алгоритм.


"RE: BASH. Как читать файл построчно?"
Отправлено uldus , 04-Фев-03 14:07 
>Появилась необходимость читать содержимое файла построчно.

cat file.txt| while read line; do                    
    echo "$line"
done


"RE: BASH. Как читать файл построчно?"
Отправлено spf , 04-Фев-03 20:24 
>>Появилась необходимость читать содержимое файла построчно.
>
>cat file.txt| while read line; do
>    echo "$line"
>done

Если хотим сэкономить на один процесс (cat) в ущерб
читабельности, то

while read line
do
   echo "$line"
done < file.txt