![]() |
|
|
google unix.com
|
|||||||
| Foros | Registro | Reglas de los Foros | Enlaces | Álbumes | Preguntas más frecuentes | Lista de miembros | Calendario | Búsqueda | Puestos de hoy | Marcar Foros Como Leídos |
| Programación de scripts de shell y Plantear preguntas sobre KSH, CSH, SH, BASH, PERL, PHP, SED, AWK y otros scripts de shell y lenguajes de script de shell aquí. |
Más UNIX y Linux Foro Temas usted puede encontrar útiles
|
||||
| Hilo | Hilo para principiantes | Foro | Respuestas | Último mensaje |
| Script de shell para la extracción de texto desde un archivo | vignesh53 | Programación de scripts de shell y | 3 | 02-05-2008 08:16 AM |
| Informe basado en la extracción de archivos en un rango de fechas | ganapati | Programación de scripts de shell y | 2 | 07-13-2006 12:26 PM |
| fecha de extracción de un archivo en KSH | homer_hn | Programación de scripts de shell y | 6 | 04-21-2006 02:51 AM |
| necesita ayuda para añadir líneas / combinando líneas dentro de un archivo ... | mr_manny | Programación de scripts de shell y | 2 | 01-06-2006 06:45 PM |
| ayuda en la extracción de archivos | apalex | UNIX for Dummies Preguntas y Respuestas | 1 | 05-01-2001 11:29 PM |
![]() |
|
|
Linkback vínculo | Herramientas de hilo | Buscar en este Hilo | Tasa de Hilo | Modos de visualización |
|
|
|
||||
|
La extracción de diversas líneas de un archivo de hugh
Estimados Miembros,
Tengo un gran archivo generado por el comando 'Whois' para cientos de direcciones IP. Cada sección en el archivo comienza con [Consulta Whois Quiero extraer las líneas que comienzan con cualquiera de estas palabras: [Consulta Whois, OrgName, NetRange, inetnum, Descr, propietario, en esa sección del país. Entrada: [Consulta whois.XJHIOUIIOOPIOP] OrgName: Universidad de C OrgID: U1 Dirección: OIT Dirección: NH Ciudad: BC StateProv: XY Código Postal: 000000 País: MN NetRange: XXX.YYY.MN - XXX.YYY.MQ CIDR: LMANERIE Netname: UC [Consulta whois.ABCE.TSD] % Restringido por los derechos de autor. % Ver % Nota: Este producto ha sido filtrada. Para recibir% de salida para una base de datos de actualización, utilice la opción "-B" del pabellón inetnum: XXX.YYY.MN - XXX.YYY.MQ netname: NET-C descr: HB descr: La Universidad país: PQ admin-c: TYE tecnología-c: SDF Estado: FGRG mnt-por: FSDGFG fuente: FGDFSG papel: OPRROKROTR dirección: La Universidad dirección: DJFIEJRE dirección: DIJAIRJEJ dirección: EIREROERE Requiere de salida: [Consulta whois.BUHIOUJIOU] OrgName: HHHHHHHHHH (puede o no presente) NetRange: TTTTTTTTT (puede o no presente) inetnum: FTYFYYYUII (puede o no presente) descr: HIJKJKLLKL (Será mejor si sólo primera aparición) propietario: JHKJOJOIPI (puede o no presente) País: OIOPOPOP (1 ª aparición) Gracias Con respecto |
|
||||
|
Diferentes registradores utilizan diferentes formatos de salida. Por lo tanto, a menos que se consulta un conjunto muy limitado de ámbitos, por ejemplo, todos los dominios registrados por una persona, o por otras razones todos los registrados en el mismo registro o sólo un pequeño conjunto de los registradores, esto puede resultar más compleja de lo que pensabas . Tal vez sería útil como un primer paso para separar las entradas a los diferentes archivos en función de la [Consulta ... línea? Pruebe el csplit comando para eso. A continuación, puede crear un analizador para cada uno de los formatos se encuentran en ese país. ¿Cómo sabes cuándo parar? A menudo se incluyen un registro de información jerárquica (especialmente para la información ARIN, que es lo que su ABCE.TSD ejemplo de esto es) en las últimas líneas que son más específicos que los anteriores. Entonces usted quiere que la frecuencia de líneas más adelante, no los anteriores. (Sin embargo, esto depende de lo que usted necesita para este, por supuesto.) De todos modos, aquí hay un intento de aplicación actual de sus especificaciones. Esto simplemente selecciona la primera de nada después de la Consulta línea: Código:
perl -ne 'if (/^\[Querying/) {
print; @wanted = qw(OrgName NetRange inetnum descr owner Country);
$wanted = &wanted(@wanted);
}
sub wanted {
return "^(" . join ("|", map { quotemeta $_ } @_) . "):";
}
if ($wanted && $_ =~ m/$wanted/i) {
print;
@wanted = grep { $_ ne $1 } @wanted;
$wanted = @wanted ? &wanted(@wanted) : "";
}' file
Esta salió un poco más monstruoso de lo que me gustaría que fuera, pero quizá se puede usar como punto de partida. (En retrospectiva, tal vez habría sido mejor utilizar un hash para hacer un seguimiento de los valores que ya están capturados, y no captura el hash si dice que ya tenemos el que estamos viendo. Empuje la captura de una serie que si la conservación el orden es importante.) Editado por última época; al 04-27-2008 08:53 AM.. Motivo: Añadir / i pabellón para hacer caso omiso de caso se pongan en venta |
|
||||
|
Hola,
Muchas gracias por la ayuda. El script es muy útil hasta 70% de mi necesidad. Voy a tratar de hacer algo para el resto de mi 30%. Gracias Con respecto Satya |
|
||||
|
Era querido,
Quiero que el guión debe tener el archivo de entrada como una variable, así como archivo de salida. Tengo dos archivos de texto: (1) Lista de carpetas en las que debe trabajar el guión (2) Lista de archivos de entrada en la que el script debería funcionar. Debido a la falta de Perl He intentado sin éxito el conocimiento. En Shell script que uso: en `i (gato countries.txt)» hacer para j en `(gato year.txt)» hacer para k en `(gato países / $ i / $ j)» hacer Misma manera quiero que la perl tomar la secuencia de comandos de entrada como variable de Gracias |
|
||||
|
Como cuestión de estilo de código de shell, los paréntesis son completamente innecesarios, y cosas invertidas en obras mal si hay un nombre de archivo con espacios en ella. No veo por qué no se puede utilizar ese script de shell para envolver la Perl código; no hay mucho que existe Perl hace mejor que la cáscara, con excepción de no tener que leer el archivo de una y otra vez (pero usted puede optimizar que en el script de shell, también). Pero de todos modos, aquí va. Me temo que esto es totalmente a prueba. Código:
#!/usr/bin/perl
die "Usage: $0 dir yearfile countryfile" unless (@ARGV == 3);
open (Y, "$ARGV[1]") || die "$0: Could not open $ARGV[1]: $!\n";
open (C, "$ARGV[2]") || die "$0: Could not open $ARGV[2]: $!\n";
my @countries = <C>;
close C;
while ($year = <Y>) {
for $country (@countries) {
handle ("$ARGV[0]/$year/$country");
}
}
close Y;
sub handle {
my ($file) = @_;
open (F, $file) || die "$0: Could not open $file: $!\n";
while (<F>) {
if (/^\[Querying/) {
print; @wanted = qw(OrgName NetRange inetnum descr owner Country);
$wanted = &wanted(@wanted);
}
if ($wanted && $_ =~ m/$wanted/i) {
print;
@wanted = grep { $_ ne $1 } @wanted;
$wanted = @wanted ? &wanted(@wanted) : "";
}
close F;
}
}
sub wanted {
return "^(" . join ("|", map { quotemeta $_ } @_) . "):";
}
|
|
||||
|
Muchas gracias por el código
Recuerdos |
![]() |
| Marcadores |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|