The UNIX and Linux Forums  
Hola y bienvenida de los Estados Unidos a la UNIX y Linux Foros! Gracias por su visita y formar parte de nuestra comunidad global.

Go Back   El UNIX y Linux Foros > Arriba Foros > Programación de scripts de shell y
.
google unix.com



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
Varios separadores de campo en awk? (En primer lugar, un espacio y, a continuación, dos puntos) doubleminus UNIX for Dummies Preguntas y Respuestas 3 04-27-2008 04:28 PM
Necesito ayuda para contar los campos y separadores de campo utilizando Nawk scrappycc Programación de scripts de shell y 3 02-06-2008 11:47 PM
se puede redirigir los archivos múltiples para la entrada? Matrix_Prime UNIX for Dummies Preguntas y Respuestas 4 02-27-2005 07:07 PM
Awk varios separadores de campo Tonka52 Programación de scripts de shell y 7 04-07-2004 10:37 PM
Salida de campo de la base de datos de múltiples archivos Dennz UNIX for Dummies Preguntas y Respuestas 3 09-01-2003 01:41 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback vínculo Herramientas de hilo Buscar en este Hilo Tasa de Hilo Modos de visualización
  #1 (Enlace permanente)  
Old 04-25-2008
kinksville kinksville is offline
Usuario Registrado
  
 

Fecha: abril 2008
Publicaciones: 7
Cool Separadores de campo de entrada múltiple en awk.

Vi un par de posts referencias a manejar más de un separador de campo de entrada en awk. Me imaginé cómo me gustaría compartir I (sólo!) Descubre que puede convertir esta línea en un 'log':

90000000000000000000010001 nombre D0.90000000000103787900010001QF840840916070000007085814Y216254 @ D1111111111111111 \u003d 1107xxxxxxxxxxxxxxx x919MENCHIES

en este formato:

90000000000000000000010001, nombre, 840840916070000007085814Y216654, 1111111111111111,1107,919 MENCHIES

Tengo toda una secuencia de comandos ya que este es sólo un paso en el proceso de convertir los registros en información útil, pero la parte pertinente Heres.

# Autor: kinksville
# Fecha: 24 de abril de 2008
# Revisado: 24 de abril de 2008
# Versión: Versión 1.00
# Otros archivos: cclookup.s, cclookup.rep
# Changelog:
# 24 de abril de 2008: la creación inicial de la secuencia de comandos.
#
# Fin de cambios.

BEGIN (
FS \u003d "[\. QF \ @ D \u003d x] +"
OFS \u003d ","
)
# Primera iteración @ D de la búsqueda, el paso de los. la inserción de un carácter y OFS.
/ \ @ D / (# Buscar cualquier línea que contenga la cadena @ D
report2 \u003d "cclookup.rep2"; # Definir report2 variable.
informe \u003d "cclookup.rep"; # Definir informe variable.
num_cclookup + +; # Obtener el número de solicitudes de autorización.
print $ 1, $ 2, $ 5, $ 6, $ 7, $ 8> informe;
print $ 0> report2;
) # Fin de la búsqueda D @.


La clave es el hecho de que awk acepta una expresión regular como separador de archivo. Este expreg FS \u003d "[\. QF \ @ D \u003d x] +" coincide con los espacios, el archivo. QF la cadena, la cadena @ D, la \u003d, y el carácter x. El + después de que el soporte de los rezagados es la clave, ya que permite que por 1 o más instancias de cualquiera de los personajes acompañados de la expresión regular.

Esto significa que x xxxxxx y son tratados como un separador de campo.

Todavía tienen que trabajar en la salida, ya que ahora tengo que cortar el nombre de la final del último campo. Lamentablemente, el número en el último campo puede ir en cualquier lugar de 9999999 a 1 y que es la parte que quiero conservar. Tal vez un [^ 0-9] + expresión?
  #2 (Enlace permanente)  
Old 04-25-2008
aigles's Avatar
Aigles aigles is offline Forum Advisor  
Usuario Registrado
  
 

Fecha: abril 2004
Ubicación: Burdeos, Francia
Mensajes: 1.423
¿Estás seguro de que su FS definición es válida para su requerimiento?
Usted no se define "@ D" y "QF" como separadores.
Los caracteres @, D, Q y H se define como separadores.

La sintaxis es válida:
Código:
FS  = "([[:space:]]|\\.|QF|=|x)+";
El obtener el último campo dígitos sin prefijo:
Código:
last_field=$NF
sub(/^[0-9]*/, "", last_field);
Jean-Pierre.
  #3 (Enlace permanente)  
Old 04-25-2008
kinksville kinksville is offline
Usuario Registrado
  
 

Fecha: abril 2008
Publicaciones: 7
Estaba un poco confundido por el hecho de que QF y @ D estaban trabajando demasiado. Creo que su causa [QF] + coincide con QQ QQQ QF QQFF etc

No es tan limpio como yo, pero como los personajes son siempre en ese lugar en el mensaje de conectado, por lo que hace lo que yo quiero que.

I'll sub en su expresión y ver qué pasa demasiado
  #4 (Enlace permanente)  
Old 04-25-2008
kinksville kinksville is offline
Usuario Registrado
  
 

Fecha: abril 2008
Publicaciones: 7
Ninguna de esas suerte

Cita:
Publicado originalmente por Aigles View Post
La sintaxis es válida:
Código:
FS  = "([[:space:]]|\\.|QF|=|x)+";

Cita:
Publicado originalmente por Aigles View Post
El obtener el último campo dígitos sin prefijo:
Código:
last_field=$NF
sub(/^[0-9]*/, "", last_field);
Jean-Pierre.


Ninguno de esos fragmentos correctamente trabajado para mí. El FS sintaxis que utilizó probablemente cambió el número de campos y para que no obtener todos los impresos.

El segundo fragmento parecía añadir el # 1 para el último campo es decir, (, 619MENCHIES1).

Voy a jugar con un poco más y ver qué pasa.
  #5 (Enlace permanente)  
Old 04-25-2008
kinksville kinksville is offline
Usuario Registrado
  
 

Fecha: abril 2008
Publicaciones: 7
Cool Así que aquí es lo que finalmente me consiguió el resultado que estaba buscando.

Código:
#This script scans the appropriate log file and copies lines containing authorization requests to the output.
#All output is comma separated.
#Author:        kinksville
#Date:          April 24, 2008
#Revised:       April 25, 2008
#Revision:      Revision 1.01
#Other files:   cclookup.s, cclookup.rep
#Changelog:
#April 24, 2008: Initial creation of the script.
#April 25, 2008: Updated the regex for the input FS to match multiple characters.
#
#End changelog.

BEGIN {
#Input field separators will match any of the following characters/strings: blank space, . , QF, @D, =, x (repeating).
#The + on the outside of the brackets will allow it to match 0 or more instances of any of the characters/strings in any combination.
#%  Any comments with the % sign are temporarily there for testing purposes.
FS="[ \. QF \@D = x]+"
#Output field separator is defined as a comma.
OFS = ","
}
#@D search, stripping out the field separator characters and inserting a OFS.
/\@D/                {                                                          #Search for any line containing the string @D
                        last_field=$8 ;
                        sub(/[^0-9]*/,"",last_field );
                        dollar_val=last_field/100 ;
                        report="cclookup.rep";                                  #Define report variable.
                        num_cclookup++;                                         #Get number of auth requests.
                        field1=$1 ;
                        field2=$2 ;
                        field3=$5 ;
                        field4=$6 ;
                        field5=$7 ;
                        printf ("%s,%s,%s,%s,%s,$%-.2f\n",field1,field2,field3,field4,field5,dollar_val) > report
                        #print $1, $2, $5, $6, $7, $8 > report;                 #Print fields 1-2 with the OFS between them to report.
                        }                                                       #End of the @D search.
Es un poco kludge pero funciona. Me parece que no puede obtener la variable last_field imprimir no importa lo que hice utilizando el comando de impresión simple, que es la razón por la que finalmente fue con printf lugar. Que también me permitió la salida de los resultados en un formato decimal ya que esos números antes de que el dólar se MENCHIES importes.

Última edición por kinksville; al 04-25-2008 06:13 PM.. Motivo: Eliminado el nombre completo de los comentarios.
Closed Thread

Marcadores

Etiquetas
awk, awk trim, trim, recortar awk

Herramientas de hilo Buscar en este Hilo
Buscar en este Hilo:

Búsqueda avanzada
Modos de visualización Vota a este hilo
Vota a este hilo:

Normas de envío
puede que no nuevo puesto de hilos
puede que no enviar respuestas
puede que no enviar archivos adjuntos
puede que no editar sus puestos

Código BB es Encendido
Emoticones son Encendido
[IMG] código Encendido
Código HTML es Apagado
Trackbacks son Encendido
Pingbacks son Encendido
Refbacks son Encendido




Todas las horas son GMT -4. La hora es 09:12 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traducciones de idiomas Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Estudios
El UNIX y Linux Foros Contenido Copyright © 1993-2009. Todos los derechos Reserved.Ad Gestión por RedTyger

Las direcciones URL de contenido vBSEO 3.2.0