The OpenNET Project / Index page

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

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

"Вложенный цикл"  +/
Сообщение от Бегемот on 01-Фев-10, 13:46 
Всем здравствуйте.
Есть задачка, но сам одолеть не могу.
Существует некий произвольный список IP адресов. Количество IP неизвестно и всякий раз отличное. Нужно - раскидать этот список по файлам по возможности на равные части. Количество частей может быть тоже разным 2, 3, 4 и т.д.

Попробовал через вложенный цикл, получается не так.

cat spisok
192.168.1.23
192.168.1.27
192.168.1.28
192.168.1.29
192.168.1.30
192.168.1.31
192.168.1.32
192.168.1.34
192.168.1.35
192.168.1.36
192.168.1.37
192.168.1.38
192.168.1.39
192.168.1.40
192.168.1.43
192.168.1.45
192.168.1.46
192.168.1.47
192.168.1.48
192.168.1.49
192.168.1.50
192.168.1.51

cat test.sh
#!/bin/sh
while read stroka; do
       i=0
       while [ $i -lt 4 ]; do
               echo $stroka >>$i
               i=$(expr $i + 1)
        done
done < spisok


В результате получается 4 одинаковых с исходным файла.
А надо чобы считывая первую строку кидаем её в 1 файл, считываем 2 - во 2 файл, 3 в 3, 4 в 4, а вот 5 снова в 1 файл и т.д. до конца исходного spiska
Короче чтобы получилось типа этого
cat 1
192.168.1.23
192.168.1.30
192.168.1.35
192.168.1.39
192.168.1.46
192.168.1.50

cat 2
192.168.1.27
192.168.1.31
192.168.1.36
192.168.1.40
192.168.1.47
192.168.1.51

cat 3
192.168.1.28
192.168.1.32
192.168.1.37
192.168.1.43
192.168.1.48

cat 4
192.168.1.29
192.168.1.34
192.168.1.38
192.168.1.45
192.168.1.49


Как побороть? Заранее спасибо.
Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

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


1. "Вложенный цикл"  +/
Сообщение от Pahanivo email(ok) on 01-Фев-10, 13:53 
я так понял что таким незатейлевм образом пытаешьс развети флейм? или реально так сложно? ))

#!/bin/sh
i_min=0
i_max=5
i=$i_min
while read stroka; do
   echo $stroka >>$i
   i=$(expr $i + 1)
   if ($i gt $i_max) then
       i=$i_min
   fi
done < spisok

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Вложенный цикл"  +/
Сообщение от Бегемот on 01-Фев-10, 14:39 
>[оверквотинг удален]
>i_min=0
>i_max=5
>i=$i_min
>while read stroka; do
>   echo $stroka >>$i
>   i=$(expr $i + 1)
>   if ($i gt $i_max) then
>       i=$i_min
>   fi
>done < spisok

О! Да.. мгновенно, снимаю шляпу перед мэтром.
Каюсь, ничего развести не хотел, тупняк нашел. =)
Тока у мну во фряхе шлифануть пришлось до


#!/bin/sh

i_min=1
i_max=4
i=$i_min
while read stroka; do
   echo $stroka >>$i
   i=$(expr $i + 1)
   if [ $i -gt $i_max ]; then
       i=$i_min
   fi
done < spisok


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Вложенный цикл"  +/
Сообщение от jd (??) on 01-Фев-10, 17:59 
#!/bin/sh
num=5
i=0
while read line; do
  echo $line >> $i
  i=$(expr \( $i + 1 \) % $num)
done

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. "Вложенный цикл"  +/
Сообщение от jd (??) on 01-Фев-10, 18:00 
да-да, я именно то самое развожу... :)
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5. "и я, и я тоже! :D"  +/
Сообщение от Andrey Mitrofanov on 01-Фев-10, 18:16 
... |gawk -v NUM=4 '{i=NR%NUM;print >>i}'
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

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

Индекс форумов | Темы | Пред. тема | След. тема




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

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