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

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

Отправлено yum , 29-Апр-12 15:54 
Как подключить в цикл 2й файл и писать его в $file2 построчно?

while read file1
do
echo $file1
echo $file2
done <file1.txt


Содержание

Сообщения в этом обсуждении
"Как в цикле читать построчно 2 файла? "
Отправлено allez , 30-Апр-12 09:42 
> Как подключить в цикл 2й файл и писать его в $file2 построчно?
> while read file1
> do
> echo $file1
> echo $file2
> done <file1.txt

Гм... Что-то не осилил я ваш поток сознания. :-)
Может, переведете на обычный русский или хотя бы приведете условия
поставленной перед вами задачи? Что вам нужно: считывать данные из двух
файлов одновременно или читать из одного файла и писать в другой?


"Как в цикле читать построчно 2 файла? "
Отправлено mrRadio , 30-Апр-12 12:11 
Напрямую насколько я знаю, читать из одного цикла нельзя, поэтому если включить воображения то эту задачу можно решить например так:

#!/bin/sh

file_one="1"
file_two="2"
count=1

file_one_len=`wc -l $file_one|awk '{print $1}'`
file_two_len=`wc -l $file_two|awk '{print $1}'`

while [ $file_one_len -gt 0 ] || [ $file_two_len -gt 0 ]
do
        str_one=`head -$count $file_one|tail -1`
        str_two=`head -$count $file_two|tail -1`
        count=$(($count + 1))
        file_one_len=$(($file_one_len - 1))
        file_two_len=$(($file_two_len - 1))

        printf "$str_one|$str_two\n"
done


"Как в цикле читать построчно 2 файла? "
Отправлено yum , 30-Апр-12 15:15 
Спасибо за ответы, вариант mrRadio работает. Может есть более простой метод.. необходимо использовать IFS

Условие следующее,
Есть два файла domains.txt и passwd.txt
Содержание файла domains.txt
domain1.com
domain2.com
...
Содержание файла passwd.txt
sdfmw:sdmw8:sdksja
adsf2:wdggs:wsdsfa
...

Задача, вывести построчно файл domains.txt и вывести потрочно из файла passwd.txt поля 1 2 3 (разделены двоеточием, каждому полю должна быть присвоена переменная - реализуется IFS)
Количество проходов цикла равно строкам у domains.txt
Пример что должно получится:

domain1.com
sdfmw
sdmw8
sdksja
domain2.com
adsf2
wdggs
wsdsfa
..

То что есть у меня:)

while read domains
   do
   echo $domains
done <domains.txt

IFS=:
while read a b c
   do
   echo $a
   echo $b
   echo $c
done <passwd.txt

Спасибо.


"Как в цикле читать построчно 2 файла? "
Отправлено allez , 30-Апр-12 15:26 
>Пример что должно получится:
>
>domain1.com
>sdfmw
>sdmw8
>sdksja
>domain2.com
>adsf2
>wdggs
>wsdsfa

$ cat domains.txt 
domain1.com
domain2.com

$ cat passwd.txt
sdfmw:sdmw8:sdksja
adsf2:wdggs:wsdsfa

$ for ((i=1; i<=$(cat domains.txt | wc -l); i++)); do sed -n "${i}p" domains.txt; sed -n "${i}p" passwd.txt | tr ":" "\n"; done
domain1.com
sdfmw
sdmw8
sdksja
domain2.com
adsf2
wdggs
wsdsfa



"Как в цикле читать построчно 2 файла? "
Отправлено yum , 30-Апр-12 16:17 
Спасибо. С IFS не получится сделать? Нужно иметь доступ к переменным a b c..

"Как в цикле читать построчно 2 файла? "
Отправлено allez , 30-Апр-12 16:56 
> Спасибо. С IFS не получится сделать? Нужно иметь доступ к переменным a
> b c..

И без алгебры... в смысле, IFS, можно. :-)


$ for ((i=1; i<=$(cat domains.txt | wc -l); i++)); do sed -n "${i}p" domains.txt; sed -n "${i}p" passwd.txt | tr ":" " " > tmpfile; read a b c < tmpfile; echo -e "${a}\n${b}\n${c}"; done; rm tmpfile
domain1.com
sdfmw
sdmw8
sdksja
domain2.com
adsf2
wdggs
wsdsfa

Вот-с, по-нашему, по-неученому... (с)

"Как в цикле читать построчно 2 файла? "
Отправлено yum , 30-Апр-12 19:08 
Понятно, спасибо! и последний вопрос на сегодня..)
Условие следующее,
Есть два файла domains.txt и passwd.txt
Содержание файла domains.txt
domain1.com
domain2.com
...
Содержание файла passwd.txt
sdfmw:sdmw8:sdksja
adsf2:wdggs:wsdsfa
..

Как дописать последовательно строки из domains.txt в passwd.txt с разделителем ':'
Должно получиться -
sdfmw:sdmw8:sdksja:domain1.com
adsf2:wdggs:wsdsfa:domain2.com
..


"Как в цикле читать построчно 2 файла? "
Отправлено allez , 30-Апр-12 21:47 
>[оверквотинг удален]
> ...
> Содержание файла passwd.txt
> sdfmw:sdmw8:sdksja
> adsf2:wdggs:wsdsfa
> ..
> Как дописать последовательно строки из domains.txt в passwd.txt с разделителем ':'
> Должно получиться -
> sdfmw:sdmw8:sdksja:domain1.com
> adsf2:wdggs:wsdsfa:domain2.com
> ..

Тут все намного проще:


$ paste -d ":" passwd.txt domains.txt
sdfmw:sdmw8:sdksja:domain1.com
adsf2:wdggs:wsdsfa:domain2.com


"Как в цикле читать построчно 2 файла? "
Отправлено Andrey Mitrofanov , 01-Май-12 10:48 
> Как подключить в цикл 2й файл и писать его в $file2 построчно?
> while read file1

$ while read f1 && read f2 <&2; do echo "$f1 + $f2"; done < <(seq 1 5) 2< <(seq 15 -1 5)
1 + 15
2 + 14
3 + 13
4 + 12
5 + 11
$ _


"Как в цикле читать построчно 2 файла? "
Отправлено yum , 02-Май-12 02:14 
> $ while read f1 && read f2 <&2; do echo "$f1 +
> $f2"; done < <(seq 1 5) 2< <(seq 15 -1 5)
> 1 + 15
> 2 + 14
> 3 + 13
> 4 + 12
> 5 + 11
> $ _

Хороший вариант, спасибо, но как быть с текстовыми файлами..
так пишет ошибку синтаксиса -
while read f1 && read f2 <&2; do echo "$f1 + $f2"; done < <1.txt 2< <2.txt
непонятна последняя часть кода..


"Как в цикле читать построчно 2 файла? "
Отправлено Andrey Mitrofanov , 02-Май-12 09:21 
> так пишет ошибку синтаксиса -
> while read f1 && read f2 <&2; do echo "$f1 + $f2";
> done < <1.txt 2< <2.txt

done < 1.txt 2< 2.txt