Показать полную графическую версию : [решено] Построчное чтение файла в Bash
FATruden
08-04-2010, 13:50
Подскажите пожалуйста как мне сделать следующее в баше:
Есть файл (file.txt) к примеру с таким содержиммым
/var/dir
/usr/lical/dir
/root/dir
...
Необходимо что бы считывалась первая строчка и записывалась в переменную к примеру var1
затем считывалась вторая строчка и присваевалась переменной var2 и так до конца файла...
Просьба ответить кодом) с увожением Александр..
Не оно ?
cat file.txt | while read line
do
echo $line
done
FATruden
08-04-2010, 15:56
Вот! Именно эта конструкция мне и нужна только прблемма в том что я не могу разобрать как она работает??
если вы представите более подробные комментарии буду очень благодарен!
Я не хочу отправлять в google, но все-таки советую почитать что-нибудь по bash, например вот это (http://old.softerra.ru/freeos/19209/page1.html).
Вкратце, по-русски :
cat выводит собержимое файла, оператор while через пайп получает вывод команды cat, построчно его читает оператором read в переменную line и печатает эту переменную на экран командой echo.
FATruden
08-04-2010, 17:55
Нет нет я не прошу курс молодого бойца) я все это знаю просто пишу на bashe не часто а такого в практике еще не было....но за вежливость спасибо)
я просто хочу понять как данная конструкция работает!
получается что сначала первая строка записывается в переменную var1 и выводится на экране
потм вторая строка записывается в туже переменную var1 и выводится на экран
и так до конца файла?? я правельно понемаю?
FATruden
08-04-2010, 18:34
А если перед записью в переменную нового значения(например второй строки) мне нужно выполнить с ней некоторые операции например копирование в эту директорию или удоление то мне необходимо
cat file.txt | while read line
do
echo $line
cp /filename.txt $line
done
так можно на сколько я понемаю?
а если мне нужно выполнить с каждой строчкой разный! набор операций как быть тогда?
а если мне нужно выполнить с каждой строчкой разный! набор операций как быть тогда? »
Как-то так:
cat file.txt | while read dirname
do
case $dirname in
"/root/dir")
f="/filename.txt"
;;
"/var/dir")
f="/filename2.txt"
;;
*)
f="/filename3.txt"
esac
cp -v $f $dirname/
done
FATruden
08-04-2010, 21:22
Спасибо большое BuGfiX, теперь разобрался)
Тема закрыта.
BlackAndrew
28-09-2012, 12:21
cat file.txt | while read dirname
do
case $dirname in
"/root/dir")
f="/filename.txt"
;;
"/var/dir")
f="/filename2.txt"
;;
*)
f="/filename3.txt"
esac
cp -v $f $dirname/
done
»
Код работает, но... после прочтения всего файла, продолжается считывание уже пустых (несуществующих) строк.
Это у меня только такое?
А вот такая ситуация, есть файл в каждой строке которого числовое значение, их 4-е (значений). Нужно из этого файла считать эти значения построчно и присваивать их переменой поочерёдно. Но нужно это делать в цикле от 1 до 4-х, т.е. цикл посчитал 1 - чтение первой переменой из файла, цикл посчитал 2 - чтение второй и т.д. до 4-х. Вариант с while read line считывает сразу все 4-е переменные в первом цикле, а не по одной. Например, есть простая конструкция типа:
for I in 1 2 3 4; do
...
done
Вот внутрь тела этой конструкции внедрить описанное.
vlad001,
В таком случае нужно использовать массив, а не переменную. И cat с пайпом не нужен, файл можно стрелкой в цикл читать:
while read -a line
do
echo "Первое значение: ${line[0]}"
echo "Второе значение: ${line[1]}"
# и т.д.
done < file.txt
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC