Помогите плз чайнику. Как в Bash считать файлу построчно и вывести куда- нибудь.
Пробовал типа while read str < file.txt; do echo $str; done ,но он выводит только первую строку и зацикливается на этом, а как сделать чтобы он считал построчно до EOF???
>Помогите плз чайнику. Как в Bash считать файлу построчно и вывести куда-
>нибудь.
>Пробовал типа while read str < file.txt; do echo $str; done ,но
>он выводит только первую строку и зацикливается на этом, а как
>сделать чтобы он считал построчно до EOF???
можно по всякому, например, так:for i in `cat file`; do echo $i; done
>for i in `cat file`; do echo $i; doneИ он выводит каждое слово из первой строки на новой строке, а я имел ввиду просто перечитать файл построчно через перем-ую.
>
>>for i in `cat file`; do echo $i; done
>
>И он выводит каждое слово из первой строки на новой строке, а
>я имел ввиду просто перечитать файл построчно через перем-ую.
вах, лажа вышла...
можешь так:for i in `cat file|tr " " "_"`; do echo $i|tr "_" " "; done
а проще это сделать на perl %)
>>
>>>for i in `cat file`; do echo $i; done
>>
>>И он выводит каждое слово из первой строки на новой строке, а
>>я имел ввиду просто перечитать файл построчно через перем-ую.
>
>
>вах, лажа вышла...
>можешь так:
>
>for i in `cat file|tr " " "_"`; do echo $i|tr "_"
>" "; done
>
>а проще это сделать на perl %)
1. А что значит |tr " " "_" и tr " "
2. Лучше на Perl, а наводочку где рыть плз. Никогда не писал на Perl
>>>
>>>>for i in `cat file`; do echo $i; done
>>>
>>>И он выводит каждое слово из первой строки на новой строке, а
>>>я имел ввиду просто перечитать файл построчно через перем-ую.
>>
>>
>>вах, лажа вышла...
>>можешь так:
>>
>>for i in `cat file|tr " " "_"`; do echo $i|tr "_"
>>" "; done
>>
>>а проще это сделать на perl %)
>1. А что значит |tr " " "_" и tr " "
>
>2. Лучше на Perl, а наводочку где рыть плз. Никогда не писал
>на Perltr заменяет один символ на другой - тут она сначала заменяет пробел на подчерк, когда считывает строку, чтобы не перескакивало с каждым пробелом на новую, а при выводе - заменяет обратно
ну это был не лучший вариант, т.к. у тебя в строке могут быть и подчерки...а на перле вот:
#!/usr/bin/perl
open(FILE, "< filename") or die "Error: $!\n";
while(<FILE>) {
print $_."\n";
}
close(FILE);и все. Никакие пробелы не страшны :)
>>>>
>>>>>for i in `cat file`; do echo $i; done
>>>>
>>>>И он выводит каждое слово из первой строки на новой строке, а
>>>>я имел ввиду просто перечитать файл построчно через перем-ую.
>>>
>>>
>>>вах, лажа вышла...
>>>можешь так:
>>>
>>>for i in `cat file|tr " " "_"`; do echo $i|tr "_"
>>>" "; done
>>>
>>>а проще это сделать на perl %)
>>1. А что значит |tr " " "_" и tr " "
>>
>>2. Лучше на Perl, а наводочку где рыть плз. Никогда не писал
>>на Perl
>
>tr заменяет один символ на другой - тут она сначала заменяет пробел
>на подчерк, когда считывает строку, чтобы не перескакивало с каждым пробелом
>на новую, а при выводе - заменяет обратно
>ну это был не лучший вариант, т.к. у тебя в строке могут
>быть и подчерки...
>
>а на перле вот:
>
>#!/usr/bin/perl
>
>open(FILE, "< filename") or die "Error: $!\n";
>while(<FILE>) {
> print $_."\n";
>}
>close(FILE);
>
>и все. Никакие пробелы не страшны :)
Спасибо, буду эту рыбу чистить(а лучше с пивом !)
>Помогите плз чайнику. Как в Bash считать файлу построчно и вывести куда-
>нибудь.
>Пробовал типа while read str < file.txt; do echo $str; done ,но
>он выводит только первую строку и зацикливается на этом, а как
>сделать чтобы он считал построчно до EOF???
cat file_name | while read line
do
echo "$line"
done
>cat file_name | while read line
>do
> echo "$line"
>doneкоманда read заменяет повторяющиеся пробелы одним пробелом, так что даже такой правильной конструкцией нельзя корректно прочитать строки из файла.
P.S. Не непонятно, почему не добавить ключ для read (например -s), чтобы запрещать read заменять повторяющиеся пробелы одним&
>>cat file_name | while read line
>>do
>> echo "$line"
>>done
>
>команда read заменяет повторяющиеся пробелы одним пробелом, так что даже такой правильной
>конструкцией нельзя корректно прочитать строки из файла.
>
>P.S. Не непонятно, почему не добавить ключ для read (например -s), чтобы
>запрещать read заменять повторяющиеся пробелы одним&Спасибо, это то что надо, Alexc.
>>cat file_name | while read line
>>do
>> echo "$line"
>>done
>
>команда read заменяет повторяющиеся пробелы одним пробелом, так что даже такой правильной
>конструкцией нельзя корректно прочитать строки из файла.
>
>P.S. Не непонятно, почему не добавить ключ для read (например -s), чтобы
>запрещать read заменять повторяющиеся пробелы одним&потому что read этого и так не делает - он всего лишь отбрасывает ненужные символы-разделители, выделяя из строки "слова". разделители ведь к самому "слову" никак не относятся - вот он их и удаляет. в том примере, что я написал, в качестве "слова" выступает вся строка, так что внутри нее никаких изменений не произойдет, но ведущие и концевые пробелы действительно будут отброшены. однако для анализа самого содержимого прочитанной строки, это все равно (как правило) ничего не значит.