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

Исходное сообщение
"Дописать вычисленное в конец строки"

Отправлено Аноним , 25-Июн-12 14:56 
Есть строки вида:

CONNECT: 25.06.2012 14:37:52 172.16.17.134

надо дописать в конец этой строки номер подсети: как уравнение (1 + 2*SUBNET+(HOST ? 1 : 0)
SUBNET - это третий октет
HOST - 4-й октет

Т.е. для строки выше это должно выглядеть как-то так

уравнение (1+2*17+1) и получаемая строка
CONNECT: 25.06.2012 14:37:52 172.16.17.34 [36]  


Содержание

Сообщения в этом обсуждении
"Дописать вычисленное в конец строки"
Отправлено КуКу , 25-Июн-12 16:15 
Разрешаем дописывай.

А если по делу, то вопрос в чем?
Пробывали писать на каком языке?


"Дописать вычисленное в конец строки"
Отправлено Аноним , 25-Июн-12 17:48 
> Разрешаем дописывай.
> А если по делу, то вопрос в чем?
> Пробывали писать на каком языке?

$ echo "CONNECT: 25.06.2012 14:37:52 172.16.17.134" | something.sh
CONNECT: 25.06.2012 14:37:52 172.16.17.134 [36]


"Дописать вычисленное в конец строки"
Отправлено КуКу , 25-Июн-12 23:52 
>> Разрешаем дописывай.
>> А если по делу, то вопрос в чем?
>> Пробывали писать на каком языке?
> $ echo "CONNECT: 25.06.2012 14:37:52 172.16.17.134" | something.sh
> CONNECT: 25.06.2012 14:37:52 172.16.17.134 [36]

Информативно, предполагаю что писать нужно на sh/bash.

Может покажете текст наработок "something.sh"?

Алгоритм, как я полагаю, прост.
На входе ловим строку, с помощью awk вычленяем нужные числа в переменные, проводим математические операции с помощью expr и возвращаем исходную строку с дополнением.


"Дописать вычисленное в конец строки"
Отправлено LSTemp , 26-Июн-12 00:40 
> Алгоритм, как я полагаю, прост.
> На входе ловим строку, с помощью awk вычленяем нужные числа в переменные,
> проводим математические операции с помощью expr и возвращаем исходную строку с
> дополнением.

и форматируем вывод с помощью sed.



"Дописать вычисленное в конец строки"
Отправлено LSTemp , 26-Июн-12 03:17 
>[оверквотинг удален]
>>> А если по делу, то вопрос в чем?
>>> Пробывали писать на каком языке?
>> $ echo "CONNECT: 25.06.2012 14:37:52 172.16.17.134" | something.sh
>> CONNECT: 25.06.2012 14:37:52 172.16.17.134 [36]
> Информативно, предполагаю что писать нужно на sh/bash.
> Может покажете текст наработок "something.sh"?
> Алгоритм, как я полагаю, прост.
> На входе ловим строку, с помощью awk вычленяем нужные числа в переменные,
> проводим математические операции с помощью expr и возвращаем исходную строку с
> дополнением.

одного awk хватит на все. конвеер никто не отменял.


"Дописать вычисленное в конец строки"
Отправлено LSTemp , 26-Июн-12 03:20 
>[оверквотинг удален]
>>>> Пробывали писать на каком языке?
>>> $ echo "CONNECT: 25.06.2012 14:37:52 172.16.17.134" | something.sh
>>> CONNECT: 25.06.2012 14:37:52 172.16.17.134 [36]
>> Информативно, предполагаю что писать нужно на sh/bash.
>> Может покажете текст наработок "something.sh"?
>> Алгоритм, как я полагаю, прост.
>> На входе ловим строку, с помощью awk вычленяем нужные числа в переменные,
>> проводим математические операции с помощью expr и возвращаем исходную строку с
>> дополнением.
> одного awk хватит на все. конвеер никто не отменял.


"Дописать вычисленное в конец строки"
Отправлено ЫЫЫ , 26-Июн-12 03:29 
>[оверквотинг удален]
>>>> Пробывали писать на каком языке?
>>> $ echo "CONNECT: 25.06.2012 14:37:52 172.16.17.134" | something.sh
>>> CONNECT: 25.06.2012 14:37:52 172.16.17.134 [36]
>> Информативно, предполагаю что писать нужно на sh/bash.
>> Может покажете текст наработок "something.sh"?
>> Алгоритм, как я полагаю, прост.
>> На входе ловим строку, с помощью awk вычленяем нужные числа в переменные,
>> проводим математические операции с помощью expr и возвращаем исходную строку с
>> дополнением.
> одного awk хватит на все. конвеер никто не отменял.


echo "CONNECT: 25.06.2012 14:37:52 172.16.17.134 DATA" | \
     tr "." " " | \
     cut -d" " -f8,9 | \
     awk '{z=0; x=$1; if ($2 > 127) { z=1 }; y=(1+2*x+z); print y}';
36

1. FS="." - нельзя, т.к. после последнего октета пробел.
2. Ежу понятно, что после cut | tr входная строка уничтожается, по этому дописывать не куда.
3. Заменить все пробелы на _, потом FS=".", потом вернуть пробелы  - маразм.



"Дописать вычисленное в конец строки"
Отправлено LSTemp , 26-Июн-12 03:48 
>[оверквотинг удален]
>> одного awk хватит на все. конвеер никто не отменял.
>
 
> echo "CONNECT: 25.06.2012 14:37:52 172.16.17.134 DATA" | \
>      tr "." " " | \
>      cut -d" " -f8,9 | \
>      awk '{z=0; x=$1; if ($2 > 127)
> { z=1 }; y=(1+2*x+z); print y}';
> 36
>

> 1. FS="." - нельзя, т.к. после последнего октета пробел.

не соизволите ли Вы Сударь, пояснить ход Ваше витиеватой мысли, дабы Мы, простые Смертные, смогли бы наконец-то озариться величием Вашего вдохновения, и смогли понять О КАКОЙ ХЕРНЕ СЕЙЧАС РЕЧЬ ШЛА?

> 2. Ежу понятно, что после cut | tr входная строка уничтожается, по

может тогда у ежа спросите?

> этому дописывать не куда.

ну разве только он уже попоисал...

> 3. Заменить все пробелы на _, потом FS=".", потом вернуть пробелы  
> - маразм.

теперь Вы что-то начинаете понимать...


"Дописать вычисленное в конец строки"
Отправлено ЫЫЫ , 26-Июн-12 03:59 
> может тогда у ежа спросите?

Всё спасибо, все свободны, а тебе отдельный респект, за терпение моей гадской морды ;)


$ echo "CONNECT: 25.06.2012 14:37:52 172.16.17.134 DATA" | \
     awk -F"." '{z=0; x=$5; if ($6 > 127) { z=1 }; y=(1+2*x+z); printf "%s %d\n", $NL, y}'

CONNECT: 25.06.2012 14:37:52 172.16.17.134 DATA 36



"Дописать вычисленное в конец строки"
Отправлено LSTemp , 26-Июн-12 04:03 
>> может тогда у ежа спросите?
> Всё спасибо, все свободны, а тебе отдельный респект, за терпение моей гадской
> морды ;)
>
 
> echo "CONNECT: 25.06.2012 14:37:52 172.16.17.134 DATA" | \
>      awk -F"." '{z=0; x=$5; if ($6 >
> 127) { z=1 }; y=(1+2*x+z); printf "%s %d\n", $NL, y}'
>

обожаю гадские морды. особенно такие умные, как ты ). рад что все получилось (хотя я несколько другой подход к решению предполагал. твой  - даже лучше).


"Дописать вычисленное в конец строки"
Отправлено LSTemp , 26-Июн-12 04:14 
>[оверквотинг удален]
>> Всё спасибо, все свободны, а тебе отдельный респект, за терпение моей гадской
>> морды ;)
>>
 
>> echo "CONNECT: 25.06.2012 14:37:52 172.16.17.134 DATA" | \
>>      awk -F"." '{z=0; x=$5; if ($6 >
>> 127) { z=1 }; y=(1+2*x+z); printf "%s %d\n", $NL, y}'
>>

> обожаю гадские морды. особенно такие умные, как ты ). рад что все
> получилось (хотя я несколько другой подход к решению предполагал. твой  
> - даже лучше).

- оптимизация awk-скрипта
- та же задача ч/з sed

по желанию.


"Дописать вычисленное в конец строки"
Отправлено ЫЫЫ , 26-Июн-12 21:28 
>>[оверквотинг удален]
> - оптимизация awk-скрипта
> - та же задача ч/з sed
> по желанию.

Показывай.


"Дописать вычисленное в конец строки"
Отправлено izvorot , 06-Июл-12 16:17 
> Есть строки вида:
> CONNECT: 25.06.2012 14:37:52 172.16.17.134
> надо дописать в конец этой строки номер подсети: как уравнение (1 +
> 2*SUBNET+(HOST ? 1 : 0)
> SUBNET - это третий октет
> HOST - 4-й октет
> Т.е. для строки выше это должно выглядеть как-то так
> уравнение (1+2*17+1) и получаемая строка
> CONNECT: 25.06.2012 14:37:52 172.16.17.34 [36]

вконце дописать номер подсети??? Это типа маску??? Я совсем не понимаю цифру [36] -что это?