Доступ к маршрутизатору из командной строки [закрыто]

Известно, что у ракушек очень низкая скорость обработки информации.
То, о чем вы просите, можно реализовать в оболочке следующим образом:

#!/bin/bash
while read line; do
    bc <<<"scale=10;($line/(100*86400))+719529"
done 

Для обработки 1000 строк требуется около 1,1 секунды.
Вся партия из 8,640 миллионов должна занять около 2 часов 41 минуты.

Кроме того, числовые результаты от bc неправильно округляются.
Пять строк из вашего примера дают такие значения:

735235.0000000000
735235.0000001157
735235.0000002314
735235.0000003472
735235.0000004629

Давайте изменим точность на 20, чтобы увидеть больше цифр:

735235.00000000000000000000
735235.00000011574074074074
735235.00000023148148148148
735235.00000034722222222222
735235.00000046296296296296

Например, третья строка, которая заканчивается на 2314, неправильно округлена, следующая цифра после 4 - 8, ее следовало округлить до 5.

AWK

Возможно, мы найдем более быстрое решение с помощью awk. Реализация того, о чем вы просите, в awk будет выглядеть так:

$ awk '{printf ("%.10f\n",($0/(100*86400))+719529)}' datafile

735235.0000000000
735235.0000001157
735235.0000002314
735235.0000003473
735235.0000004630

Для обработки 1000 строк требуется всего 0.006 (6 миллисекунд). Все 8,64 миллиона строк должны быть обработаны примерно за 50 секунд.
Но awk уже превышает свой диапазон точности. По умолчанию он использует 64-битное представление значений с плавающей точкой. Это представление имеет точность около 15 десятичных цифр. Результаты ваших данных имеют целочисленную часть из 6 цифр, десятичная часть может быть оценена как правильная только до 8-й цифры.
На самом деле, если мы попытаемся увеличить количество цифр:

awk '{printf ("%.20f\n",($0/(100*86400))+719529)}' datafile

мы получим просто шум:

735235.00000000000000000000
735235.00000011571682989597
735235.00000023143365979195
735235.00000034726690500975
735235.00000046298373490572

Сравните с более точными результатами bc:

735235.00000000000000000000
735235.00000000000000000000

735235.00000011571682989597
735235.00000011574074074074

735235.00000023143365979195
735235.00000023148148148148

735235.00000034726690500975
735235.00000034722222222222

735235.00000046298373490572
735235.00000046296296296296

Чтобы действительно решить эту проблему, нам нужен более точный awk.

Многопрецизионный AWK

Если вы используете GNU awk (далее я буду называть его gawk) и он был скомпилирован с MPFR (библиотека многократной точности с плавающей точкой), вы можете получить большую точность.

Убедитесь, что в вашем awk есть эта библиотека (просто спросите ее версию):

$ awk --version
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.5, GNU MP 6.1.1)
Copyright (C) 1989, 1991-2015 Free Software Foundation.

И измените команду awk, чтобы использовать доступную точность:

gawk -M -v PREC=100 '{printf ("%.20f\n",($0/(100*86400))+719529)}' datafile

735235.00000000000000000000
735235.00000011574074074074
735235.00000023148148148148
735235.00000034722222222222
735235.00000046296296296296

Результаты те же, что и при использовании bc высокой точности.
В этом случае мы получаем скорость awk и точность bc.

Последняя команда для 10 десятичных цифр, которые вы просите, такова:

gawk -M -v PREC=100 '{printf ("%.10f\n",($0/(100*86400))+719529)}' datafile

735235.0000000000
735235.0000001157
735235.0000002315
735235.0000003472
735235.0000004630

Все значения правильно округлены.

2
28.02.2018, 13:14
2 ответа

Esta es una pregunta muy genérica que revela poco conocimiento sobre cómo funcionan los dispositivos en red.

La respuesta es, por supuesto, depende.

  • Se puede acceder a los enrutadores que brindan servicios de línea de comando como telnet o SSH utilizando los protocolos respectivos(telnet <ip>ossh <user>@<ip>).
  • No se puede acceder a los enrutadores que no brindan servicios de administración de línea de comandos de esta manera. Por lo general, hay una interfaz basada en web y eso es todo.
  • También hay casos en los que se requiere que una determinada pieza de software interactúe con un dispositivo utilizando algún tipo de protocolo más o menos abierto. Si profundiza en el hardware, también puede encontrar una interfaz de consola basada en serie... pero esa es otra historia.
4
27.01.2020, 22:09

Вы говорите о Баше? Отметьте свой вопрос, чтобы узнать об операционной системе.

Что вы думаете о рыси:

http://lynx.invisible-island.net/

Lynx — это текстовый веб-браузер, который должен предоставляться в большинстве репозиториев пакетов Linux. Установка зависит от вашего дистрибутива (sudo apt-get install lynx, sudo yum install lynx,... ).

Поскольку изображения не должны иметь большого значения для управления маршрутизатором через веб-страницу, это может быть полезно для вас.

Если ваш маршрутизатор использует AUTH TYPE BASIC для аутентификации, вариант «-auth» может вам подойти. Но если у него есть базовая форма входа в систему, это усложнится -, возможно, это невозможно.

1
27.01.2020, 22:09

Теги

Похожие вопросы