• Publicidad

Rellenar plantilla tabla de "hosts" con Perl

¿Eres administrador de sistemas? Este foro es para todos aquellos temas relacionados con el uso de Perl para administración de sistemas.

Rellenar plantilla tabla de "hosts" con Perl

Notapor CamellitoPerlero » 2016-03-02 05:32 @272

Saludos, foro:

Esto sé cómo hacerlo con shell script y otros, pero me pregunto cuál sería la forma más adecuada en Perl.

Tengo una plantilla de tabla de hosts Unix:

IP nombre1 nombre2

donde querría parametrizar el número de cadena y la IP de inicio (como se indica a continuación) para generar la secuencia de hosts automáticamente.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
------------MANAGEMENT LAN----------

10.12.67.( ${IP_INICIO} + 1  )     s${NUM_CADENA}fdpa3 s${NUM_CADENA}fdpa
10.12.67.( ${IP_INICIO} + 2  )     s${NUM_CADENA}fdpb3 s${NUM_CADENA}fdpb
10.12.67.( ${IP_INICIO} + 3  )     s${NUM_CADENA}cora3 s${NUM_CADENA}cora
10.12.67.( ${IP_INICIO} + 4  )     s${NUM_CADENA}corb3 s${NUM_CADENA}corb
10.12.67.( ${IP_INICIO} + 5  )     s${NUM_CADENA}isaa3 s${NUM_CADENA}isaa
10.12.67.( ${IP_INICIO} + 6  )     s${NUM_CADENA}cmda3 s${NUM_CADENA}cmda
10.12.67.( ${IP_INICIO} + 7  )     s${NUM_CADENA}fdoa3 s${NUM_CADENA}fdoa
10.12.67.( ${IP_INICIO} + 8  )     s${NUM_CADENA}cwp013 s${NUM_CADENA}cwp01
10.12.67.( ${IP_INICIO} + 9  )     s${NUM_CADENA}itga3 s${NUM_CADENA}itga
10.12.67.( ${IP_INICIO} + 10  )     s${NUM_CADENA}itgb3 s${NUM_CADENA}itgb
10.12.67.( ${IP_INICIO} + 11  )     s${NUM_CADENA}drfa3 s${NUM_CADENA}drfa
10.12.67.( ${IP_INICIO} + 12  )     s${NUM_CADENA}drfb3 s${NUM_CADENA}drfb
10.12.67.( ${IP_INICIO} + 13  )     s${NUM_CADENA}cwp023 s${NUM_CADENA}cwp02
#10.12.67.( ${IP_INICIO} + 14  )    flotante_fdp__

-------------MAIN LAN---------------

10.12.55.( ${IP_INICIO} + 1  )     s${NUM_CADENA}fdpa1
10.12.55.( ${IP_INICIO} + 2  )     s${NUM_CADENA}fdpb1
10.12.55.( ${IP_INICIO} + 3  )     s${NUM_CADENA}cora1
10.12.55.( ${IP_INICIO} + 4  )     s${NUM_CADENA}corb1
10.12.55.( ${IP_INICIO} + 5  )     s${NUM_CADENA}isaa1
10.12.55.( ${IP_INICIO} + 6  )     s${NUM_CADENA}cmda1
10.12.55.( ${IP_INICIO} + 7  )     s${NUM_CADENA}fdoa1
10.12.55.( ${IP_INICIO} + 8  )     s${NUM_CADENA}cwp011
10.12.55.( ${IP_INICIO} + 9  )     s${NUM_CADENA}itga1
10.12.55.( ${IP_INICIO} + 10  )    s${NUM_CADENA}itgb1
10.12.55.( ${IP_INICIO} + 11  )    s${NUM_CADENA}drfa1
10.12.55.( ${IP_INICIO} + 12  )    s${NUM_CADENA}drfb1
10.12.55.( ${IP_INICIO} + 14  )    s${NUM_CADENA}cwp021

-------------TEST A LAN-------------

10.12.59.( ${IP_INICIO} + 1  )     s${NUM_CADENA}fdpa4
10.12.59.( ${IP_INICIO} + 2  )     s${NUM_CADENA}fdpb4
10.12.59.( ${IP_INICIO} + 3  )     s${NUM_CADENA}cora4
10.12.59.( ${IP_INICIO} + 4  )     s${NUM_CADENA}corb4
10.12.59.( ${IP_INICIO} + 5  )     s${NUM_CADENA}isaa4
10.12.59.( ${IP_INICIO} + 6  )     s${NUM_CADENA}cmda4
10.12.59.( ${IP_INICIO} + 7  )     s${NUM_CADENA}fdoa4
10.12.59.( ${IP_INICIO} + 8  )     s${NUM_CADENA}cwp014
10.12.59.( ${IP_INICIO} + 9  )     s${NUM_CADENA}itga4
10.12.59.( ${IP_INICIO} + 10  )    s${NUM_CADENA}itgb4
10.12.59.( ${IP_INICIO} + 11  )    s${NUM_CADENA}drfa4
10.12.59.( ${IP_INICIO} + 12  )    s${NUM_CADENA}drfb4
10.12.59.( ${IP_INICIO} + 14  )    s${NUM_CADENA}cwp024

-------------TEST B LAN-------------

10.12.63.( ${IP_INICIO} + 1  )     s${NUM_CADENA}fdpa5
10.12.63.( ${IP_INICIO} + 2  )     s${NUM_CADENA}fdpb5
10.12.63.( ${IP_INICIO} + 3  )     s${NUM_CADENA}cora5
10.12.63.( ${IP_INICIO} + 4  )     s${NUM_CADENA}corb5
10.12.63.( ${IP_INICIO} + 5  )     s${NUM_CADENA}isaa5
10.12.63.( ${IP_INICIO} + 6  )     s${NUM_CADENA}cmda5
10.12.63.( ${IP_INICIO} + 7  )     s${NUM_CADENA}fdoa5
10.12.63.( ${IP_INICIO} + 8  )     s${NUM_CADENA}cwp015
10.12.63.( ${IP_INICIO} + 9  )     s${NUM_CADENA}itga5
10.12.63.( ${IP_INICIO} + 10  )    s${NUM_CADENA}itgb5
10.12.63.( ${IP_INICIO} + 11  )    s${NUM_CADENA}drfa5
10.12.63.( ${IP_INICIO} + 12  )    s${NUM_CADENA}drfb5
10.12.63.( ${IP_INICIO} + 14  )    s${NUM_CADENA}cwp025

#####################################################
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


¿Alguna idea?
Muchas gracias, J.
CamellitoPerlero
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2015-01-28 05:00 @250

Publicidad

Re: Rellenar plantilla tabla de "hosts" con Perl

Notapor explorer » 2016-03-02 17:14 @760

Bienvenido a los foros de Perl en Español, CamellitoPerlero.

Si el trabajo consiste en "traducir" el valor de ${IP_INICIO} y de ${NUM_CADENA}, eso lo puedes resolver en tres pasos:

1) leer la $plantilla, como archivo externo, y los valores de $IP_INICIO y $NUM_CADENA desde la línea de argumentos (u otro sitio)
2) hacer una evaluación del texto:

$nuevo_texto = eval qq("$plantilla");

3) imprimir o guardar el resultado.

Esto se puede hacer así porque, en la propia plantilla, los identificadores de IP_INICIO y NUM_CADENA ya están escritos con la sintaxis Perl, así que solo queda eval()uar la plantilla para que se genere un texto con los valores actuales de las variables.

Pero... el problema está en las operaciones matemáticas +1, +2, +3, etc. No corresponden a sintaxis Perl, por lo que no serían traducidos.

Pero no sabemos si quieres dejarlo así o no, calcular o no esas operaciones.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Rellenar plantilla tabla de "hosts" con Perl

Notapor CamellitoPerlero » 2016-03-03 05:26 @268

Muchas gracias, explorer.

Mi intención era efectuar también las operaciones matemáticas, no traducir sin más.

La sintaxis ( ${IP_INICIO} + 1 ) era un previo a utilizarlo en el shell, por ejemplo de esta manera:

echo "10.12.63.$( expr ( ${IP_INICIO} + 1 ) ) s${NUM_CADENA}fdpa5"
(Casualmente también conforma la sintaxis de variable Perl)

Pero me preguntaba si desde Perl hay alguna manera más elegante o eficiente de rellenar o pre-procesar esta plantilla con sus cálculos matematicos internos (??) (pensando en cuando tuviese un texto con muchas más líneas).

Saludos, Javier.
CamellitoPerlero
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2015-01-28 05:00 @250

Re: Rellenar plantilla tabla de "hosts" con Perl

Notapor explorer » 2016-03-03 11:26 @518

No, la sintaxis $( ... ) no es de Perl.

La sintaxis más cercana a la de querer evaluar una expresión dentro de una cadena, sería con el truco @{[ .. ]}

Entonces, si las líneas fueran así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
------------MANAGEMENT LAN----------

10.12.67.@{[ ${IP_INICIO} + 1  ]}     s${NUM_CADENA}fdpa3 s${NUM_CADENA}fdpa
10.12.67.@{[ ${IP_INICIO} + 2  ]}     s${NUM_CADENA}fdpb3 s${NUM_CADENA}fdpb
10.12.67.@{[ ${IP_INICIO} + 3  ]}     s${NUM_CADENA}cora3 s${NUM_CADENA}cora
10.12.67.@{[ ${IP_INICIO} + 4  ]}     s${NUM_CADENA}corb3 s${NUM_CADENA}corb
10.12.67.@{[ ${IP_INICIO} + 5  ]}     s${NUM_CADENA}isaa3 s${NUM_CADENA}isaa
10.12.67.@{[ ${IP_INICIO} + 6  ]}     s${NUM_CADENA}cmda3 s${NUM_CADENA}cmda
10.12.67.@{[ ${IP_INICIO} + 7  ]}     s${NUM_CADENA}fdoa3 s${NUM_CADENA}fdoa
10.12.67.@{[ ${IP_INICIO} + 8  ]}     s${NUM_CADENA}cwp013 s${NUM_CADENA}cwp01
10.12.67.@{[ ${IP_INICIO} + 9  ]}     s${NUM_CADENA}itga3 s${NUM_CADENA}itga
10.12.67.@{[ ${IP_INICIO} + 10 ]}     s${NUM_CADENA}itgb3 s${NUM_CADENA}itgb
10.12.67.@{[ ${IP_INICIO} + 11 ]}     s${NUM_CADENA}drfa3 s${NUM_CADENA}drfa
10.12.67.@{[ ${IP_INICIO} + 12 ]}     s${NUM_CADENA}drfb3 s${NUM_CADENA}drfb
10.12.67.@{[ ${IP_INICIO} + 13 ]}     s${NUM_CADENA}cwp023 s${NUM_CADENA}cwp02
#10.12.67.@{[ ${IP_INICIO} + 14 ]}    flotante_fdp__

-------------MAIN LAN---------------

10.12.55.@{[ ${IP_INICIO} + 1  ]}     s${NUM_CADENA}fdpa1
10.12.55.@{[ ${IP_INICIO} + 2  ]}     s${NUM_CADENA}fdpb1
10.12.55.@{[ ${IP_INICIO} + 3  ]}     s${NUM_CADENA}cora1
10.12.55.@{[ ${IP_INICIO} + 4  ]}     s${NUM_CADENA}corb1
10.12.55.@{[ ${IP_INICIO} + 5  ]}     s${NUM_CADENA}isaa1
10.12.55.@{[ ${IP_INICIO} + 6  ]}     s${NUM_CADENA}cmda1
10.12.55.@{[ ${IP_INICIO} + 7  ]}     s${NUM_CADENA}fdoa1
10.12.55.@{[ ${IP_INICIO} + 8  ]}     s${NUM_CADENA}cwp011
10.12.55.@{[ ${IP_INICIO} + 9  ]}     s${NUM_CADENA}itga1
10.12.55.@{[ ${IP_INICIO} + 10 ]}     s${NUM_CADENA}itgb1
10.12.55.@{[ ${IP_INICIO} + 11 ]}     s${NUM_CADENA}drfa1
10.12.55.@{[ ${IP_INICIO} + 12 ]}     s${NUM_CADENA}drfb1
10.12.55.@{[ ${IP_INICIO} + 14 ]}     s${NUM_CADENA}cwp021

-------------TEST A LAN-------------

10.12.59.@{[ ${IP_INICIO} + 1  ]}     s${NUM_CADENA}fdpa4
10.12.59.@{[ ${IP_INICIO} + 2  ]}     s${NUM_CADENA}fdpb4
10.12.59.@{[ ${IP_INICIO} + 3  ]}     s${NUM_CADENA}cora4
10.12.59.@{[ ${IP_INICIO} + 4  ]}     s${NUM_CADENA}corb4
10.12.59.@{[ ${IP_INICIO} + 5  ]}     s${NUM_CADENA}isaa4
10.12.59.@{[ ${IP_INICIO} + 6  ]}     s${NUM_CADENA}cmda4
10.12.59.@{[ ${IP_INICIO} + 7  ]}     s${NUM_CADENA}fdoa4
10.12.59.@{[ ${IP_INICIO} + 8  ]}     s${NUM_CADENA}cwp014
10.12.59.@{[ ${IP_INICIO} + 9  ]}     s${NUM_CADENA}itga4
10.12.59.@{[ ${IP_INICIO} + 10 ]}     s${NUM_CADENA}itgb4
10.12.59.@{[ ${IP_INICIO} + 11 ]}     s${NUM_CADENA}drfa4
10.12.59.@{[ ${IP_INICIO} + 12 ]}     s${NUM_CADENA}drfb4
10.12.59.@{[ ${IP_INICIO} + 14 ]}     s${NUM_CADENA}cwp024

-------------TEST B LAN-------------

10.12.63.@{[ ${IP_INICIO} + 1  ]}     s${NUM_CADENA}fdpa5
10.12.63.@{[ ${IP_INICIO} + 2  ]}     s${NUM_CADENA}fdpb5
10.12.63.@{[ ${IP_INICIO} + 3  ]}     s${NUM_CADENA}cora5
10.12.63.@{[ ${IP_INICIO} + 4  ]}     s${NUM_CADENA}corb5
10.12.63.@{[ ${IP_INICIO} + 5  ]}     s${NUM_CADENA}isaa5
10.12.63.@{[ ${IP_INICIO} + 6  ]}     s${NUM_CADENA}cmda5
10.12.63.@{[ ${IP_INICIO} + 7  ]}     s${NUM_CADENA}fdoa5
10.12.63.@{[ ${IP_INICIO} + 8  ]}     s${NUM_CADENA}cwp015
10.12.63.@{[ ${IP_INICIO} + 9  ]}     s${NUM_CADENA}itga5
10.12.63.@{[ ${IP_INICIO} + 10 ]}     s${NUM_CADENA}itgb5
10.12.63.@{[ ${IP_INICIO} + 11 ]}     s${NUM_CADENA}drfa5
10.12.63.@{[ ${IP_INICIO} + 12 ]}     s${NUM_CADENA}drfb5
10.12.63.@{[ ${IP_INICIO} + 14 ]}     s${NUM_CADENA}cwp025

#####################################################
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
con un programa como este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use File::Slurp;
  3.  
  4. my $IP_INICIO  = 200;
  5. my $NUM_CADENA = 'especial';
  6.  
  7. my $plantilla = read_file('code_39305.txt');
  8.  
  9. my $nuevo_texto = eval qq("$plantilla");
  10.  
  11. print $nuevo_texto;
  12.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
sale esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
------------MANAGEMENT LAN----------

10.12.67.201     sespecialfdpa3 sespecialfdpa
10.12.67.202     sespecialfdpb3 sespecialfdpb
10.12.67.203     sespecialcora3 sespecialcora
10.12.67.204     sespecialcorb3 sespecialcorb
10.12.67.205     sespecialisaa3 sespecialisaa
10.12.67.206     sespecialcmda3 sespecialcmda
10.12.67.207     sespecialfdoa3 sespecialfdoa
10.12.67.208     sespecialcwp013 sespecialcwp01
10.12.67.209     sespecialitga3 sespecialitga
10.12.67.210     sespecialitgb3 sespecialitgb
10.12.67.211     sespecialdrfa3 sespecialdrfa
10.12.67.212     sespecialdrfb3 sespecialdrfb
10.12.67.213     sespecialcwp023 sespecialcwp02
#10.12.67.214     flotante_fdp__

-------------MAIN LAN---------------

10.12.55.201     sespecialfdpa1
10.12.55.202     sespecialfdpb1
10.12.55.203     sespecialcora1
10.12.55.204     sespecialcorb1
10.12.55.205     sespecialisaa1
10.12.55.206     sespecialcmda1
10.12.55.207     sespecialfdoa1
10.12.55.208     sespecialcwp011
10.12.55.209     sespecialitga1
10.12.55.210     sespecialitgb1
10.12.55.211     sespecialdrfa1
10.12.55.212     sespecialdrfb1
10.12.55.214     sespecialcwp021

-------------TEST A LAN-------------

10.12.59.201     sespecialfdpa4
10.12.59.202     sespecialfdpb4
10.12.59.203     sespecialcora4
10.12.59.204     sespecialcorb4
10.12.59.205     sespecialisaa4
10.12.59.206     sespecialcmda4
10.12.59.207     sespecialfdoa4
10.12.59.208     sespecialcwp014
10.12.59.209     sespecialitga4
10.12.59.210     sespecialitgb4
10.12.59.211     sespecialdrfa4
10.12.59.212     sespecialdrfb4
10.12.59.214     sespecialcwp024

-------------TEST B LAN-------------

10.12.63.201     sespecialfdpa5
10.12.63.202     sespecialfdpb5
10.12.63.203     sespecialcora5
10.12.63.204     sespecialcorb5
10.12.63.205     sespecialisaa5
10.12.63.206     sespecialcmda5
10.12.63.207     sespecialfdoa5
10.12.63.208     sespecialcwp015
10.12.63.209     sespecialitga5
10.12.63.210     sespecialitgb5
10.12.63.211     sespecialdrfa5
10.12.63.212     sespecialdrfb5
10.12.63.214     sespecialcwp025

#####################################################
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Rellenar plantilla tabla de "hosts" con Perl

Notapor CamellitoPerlero » 2016-03-04 06:08 @297

Muchas gracias, explorer, justo lo que buscaba.

Tratando de entender la función read_file de File::Slurp, supongo que la ventaja es que permite leer el fichero de golpe en la variable y así poder también procesar de golpe el eval() en una sola línea de código. Genial.

Saludos, j.
CamellitoPerlero
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2015-01-28 05:00 @250


Volver a Administración

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado