Всем здравствуйте.
Есть задачка, но сам одолеть не могу.
Существует некий произвольный список 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.51cat 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.50cat 2
192.168.1.27
192.168.1.31
192.168.1.36
192.168.1.40
192.168.1.47
192.168.1.51cat 3
192.168.1.28
192.168.1.32
192.168.1.37
192.168.1.43
192.168.1.48cat 4
192.168.1.29
192.168.1.34
192.168.1.38
192.168.1.45
192.168.1.49
Как побороть? Заранее спасибо.
я так понял что таким незатейлевм образом пытаешьс развети флейм? или реально так сложно? ))#!/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
>[оверквотинг удален]
>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/shi_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
#!/bin/sh
num=5
i=0
while read line; do
echo $line >> $i
i=$(expr \( $i + 1 \) % $num)
done
да-да, я именно то самое развожу... :)
... |gawk -v NUM=4 '{i=NR%NUM;print >>i}'