Помогите с шелл скриптом.
Задача взять из текстового файла ip : port (забиты построчно, несколько строк) 2 случайных ИП с портом и в другом файле в строках
[HTML]
parent 500 http IP PORT
parent 500 http IP PORT
[/HTML]произвести замену существующих ip и портов на новые.
- Делаю random прокси(что б каждый час менялся). как на proxy.void.ru .
Не допираю как составить.
Помогите составть скрипт (awk\ssed)
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
-
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
- Контактная информация:
Re: Помогите составть скрипт (awk\ssed)
Так можно получить два случайных номера строк из файла ФАЙЛ_С_ХОСТАМИ_ПОРТАМИ
А потом получение строк по номерам и замена на эти строки.
Команда jot с опцией -r генерирует указанное кол-во случайных чисел (первый параметр) из указанного диапазона(2-й и 3-й параметры), переопределяет разделитель между результатами (по умолчанию - разделитель - перевод строки).
Код: Выделить всё
jot -r -s " " 2 1 `wc -l ФАЙЛ_С_ХОСТАМИ_ПОРТАМИ | awk '{print $1}'`
Команда jot с опцией -r генерирует указанное кол-во случайных чисел (первый параметр) из указанного диапазона(2-й и 3-й параметры),
Код: Выделить всё
-s " "
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
-
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
- Контактная информация:
Re: Помогите составть скрипт (awk\ssed)
Как вариант: получение двух случайных записей из файла:
change_001.sh (параметр - файл с IP:порт)
change_001.sh (параметр - файл с IP:порт)
Код: Выделить всё
#!/bin/sh
#
# change_001.sh
# 2011-02-17 17:34:18
#
NUMS=$(jot -r -s "|" 2 1 `wc -l $1 | awk '{print $1}'`)
HOSTS_PORT=`grep -n \^ $1 | egrep "^($NUMS):" | awk -F ':' '{print $2}'`
echo "$HOSTS_PORT"
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
-
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
- Контактная информация:
Re: Помогите составть скрипт (awk\ssed)
Такой вариант.
Не очень кратко\красиво\универсально, но работает.
change_001.sh с тремя параметрами: 1 - файл со списком IP:порт, 2 - входной файл, 3- файл выходной
Не очень кратко\красиво\универсально, но работает.
change_001.sh с тремя параметрами: 1 - файл со списком IP:порт, 2 - входной файл, 3- файл выходной
Код: Выделить всё
#!/bin/sh
#
# change_001.sh
# 2011-02-19
#
STR_NUM=`wc -l $1 | awk '{print $1}'`
NUM1=$(jot -r 1 1 $STR_NUM)
NUM2=$(jot -r 1 1 $STR_NUM)
while [ "$NUM1" -eq "$NUM2" ]
do
NUM2=$(jot -r 1 1 $STR_NUM)
done
NUMS="$NUM1|$NUM2"
HOSTS_PORT=`grep -n \^ $1 | egrep "^($NUMS):" | awk -F ':' 'BEGIN {OFS=":"}{print $2,$3}'`
host1="`echo "$HOSTS_PORT" | awk '{ if ( NR == 1) {print}}'`"
host2="`echo "$HOSTS_PORT" | awk '{ if ( NR == 2) {print}}'`"
awk 'BEGIN {kolvo=0}
{if ($0 ~/^[ \t]*parent 500 http / && kolvo < 2 ) {
if ( kolvo == 0 ) {
print "parent 500 http "host1;
kolvo++;
next;
}
if ( kolvo == 1 ) {
print "parent 500 http "host2;
kolvo++;
}
}else{
print;
}
}
' host1="$host1" host2="$host2" $2 > $3
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.
-
- лейтенант
- Сообщения: 613
- Зарегистрирован: 2009-08-05 16:10:46
- Откуда: Украина Днепропетровск-Киев
- Контактная информация:
Re: Помогите составть скрипт (awk\ssed)
Еще вариант:
change_001.sh с тремя параметрами: 1 - файл со списком IP:порт, 2 - входной файл, вывод на консоль
Вместо вставить табуляцию.
change_001.sh с тремя параметрами: 1 - файл со списком IP:порт, 2 - входной файл, вывод на консоль
Код: Выделить всё
#!/bin/sh
#
# change_001.sh
# получить кол-во строк в файле с IP:порт
STR_NUM=`wc -l $1 | awk '{print $1}'`
# получить первый случайный номер строки
NUM1=$(jot -r 1 1 $STR_NUM)
# получить второй случайный номер строки
NUM2=$(jot -r 1 1 $STR_NUM)
# для гарантирования того, что получили разные номера
while [ "$NUM1" -eq "$NUM2" ]
do
NUM2=$(jot -r 1 1 $STR_NUM)
done
# получить первый IP:PORT
host1=`sed -n "${NUM1}p" $1`
# получить второй IP:PORT
host2=`sed -n "${NUM2}p" $1`
a="[ <->]\{0,\}"
q="parent 500 http "
w="[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}:[0-9]\{1,5\}"
sed "/^$a$q$w/{
N;
s/$w\(\n\)$a$q$w/$host1\1$q$host2/;
}" $2
Код: Выделить всё
<->
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.