The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как в цикле читать построчно 2 файла? "
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Как в цикле читать построчно 2 файла? "  +/
Сообщение от yum (ok) on 29-Апр-12, 15:54 
Как подключить в цикл 2й файл и писать его в $file2 построчно?

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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как в цикле читать построчно 2 файла? "  +/
Сообщение от allez (ok) on 30-Апр-12, 09:42 
> Как подключить в цикл 2й файл и писать его в $file2 построчно?
> while read file1
> do
> echo $file1
> echo $file2
> done <file1.txt

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Как в цикле читать построчно 2 файла? "  +/
Сообщение от mrRadio on 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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Как в цикле читать построчно 2 файла? "  +/
Сообщение от yum (ok) on 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 | Наверх | Cообщить модератору

4. "Как в цикле читать построчно 2 файла? "  +/
Сообщение от allez (ok) on 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


Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Как в цикле читать построчно 2 файла? "  +/
Сообщение от yum (ok) on 30-Апр-12, 16:17 
Спасибо. С IFS не получится сделать? Нужно иметь доступ к переменным a b c..
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Как в цикле читать построчно 2 файла? "  +/
Сообщение от allez (ok) on 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

Вот-с, по-нашему, по-неученому... (с)
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Как в цикле читать построчно 2 файла? "  +/
Сообщение от yum (ok) on 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
..

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Как в цикле читать построчно 2 файла? "  +/
Сообщение от allez (ok) on 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

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Как в цикле читать построчно 2 файла? "  +1 +/
Сообщение от Andrey Mitrofanov on 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
$ _

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

10. "Как в цикле читать построчно 2 файла? "  +/
Сообщение от yum (ok) on 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
непонятна последняя часть кода..

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Как в цикле читать построчно 2 файла? "  +/
Сообщение от Andrey Mitrofanov on 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

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру