The UNIX and Linux Forums  


Go Back   Les systèmes UNIX et Linux Forums > Top Forums > De programmation et de script Shell
.
google unix.com



De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici.

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
Séparateurs de champs multiples dans awk? (Tout d'abord un espace, un colon) doubleminus UNIX pour les nuls Questions et réponses 3 04-27-2008 04:28 PM
J'ai besoin d'aide pour compter les domaines et sur le terrain en utilisant des séparateurs Nawk scrappycc De programmation et de script Shell 3 02-06-2008 11:47 PM
vous pouvez rediriger plusieurs fichiers en entrée? Matrix_Prime UNIX pour les nuls Questions et réponses 4 02-27-2005 07:07 PM
Awk Multiple Field Separators Tonka52 De programmation et de script Shell 7 04-07-2004 10:37 PM
Multiple Output Field de fichier de base de données Dennz UNIX pour les nuls Questions et réponses 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 Thread Tools Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Registered User
  
 

Date d'inscription: avril 2008
Messages: 7
Cool Séparateurs de multiples champs de awk.

J'ai vu un couple de postes référencement ici comment gérer plus d'un séparateur de champ d'entrée de awk. Je me suis, je part comment I (seulement!) Figurait sur la façon de transformer cette ligne dans un fichier journal:

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

dans ce format:

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

J'ai un script depuis ce n'est qu'une étape dans un processus de transformation de grumes en informations utiles, mais voici la partie pertinente.

# Auteur: kinksville
# Date: 24 avril 2008
# Mise à jour: 24 avril 2008
# Version: Version 1.00
# Autres dossiers: cclookup.s, cclookup.rep
# Changelog:
# 24 avril 2008: Première création du script.
#
# Fin changelog.

BEGIN (
FS \u003d "[\. QF \ @ D \u003d x] +"
OFS \u003d ","
)
# Première itération de la recherche @ D, le décapage de l'. caractère et de l'insertion d'une OFS.
/ \ @ D / (# Recherche de toutes les lignes contenant la chaîne @ D
report2 \u003d "cclookup.rep2"; # Préciser report2 variable.
rapport \u003d "cclookup.rep"; # Préciser rapport variable.
num_cclookup + +; # Retourne le nombre de demandes d'authentification.
print $ 1, $ 2, $ 5, $ 6, $ 7, $ 8> rapport;
print $ 0> report2;
) # Fin de la recherche @ D.


La clé est le fait que awk accepte une expression régulière en tant que fichier séparateur. Cette regexp FS \u003d "[\. QF \ @ D \u003d x] +" correspond à des espaces, l'. QF la chaîne, la chaîne @ D, le \u003d, et le caractère x. Le + après le support mobile est la clé, car cela permet pour 1 ou plusieurs instances de l'un des personnages de pair avec la regexp.

Cela signifie que x et xxxxxx sont tous deux considérés comme un seul séparateur de champs.

J'ai encore besoin de travailler sur la production, puisque maintenant j'ai besoin de couper le nom de la fin du dernier champ. Malheureusement, le nombre dans le dernier champ peut varier de 1 à 9999999, et c'est la partie que je veux préserver. Peut-être un [^ 0-9] + expression?
  #2 (permalink)  
Old 04-25-2008
aigles's Avatar
Aigles aigles is offline Forum Advisor  
Registered User
  
 

Date d'inscription: avril 2004
Lieu: Bordeaux, France
Posts: 1428
Etes-vous sûr que votre FS définition est valable pour vos besoins?
Vous ne définit pas les "@ D" et "QF" comme séparateur.
Les caractères @, D, Q et F sont de définir les séparateurs.

La syntaxe est valable:
Code:
FS  = "([[:space:]]|\\.|QF|=|x)+";
La obtenir le dernier champ, sans préfixant chiffres:
Code:
last_field=$NF
sub(/^[0-9]*/, "", last_field);
Jean-Pierre.
  #3 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Registered User
  
 

Date d'inscription: avril 2008
Messages: 7
J'ai été un peu déroutés par le fait que QF @ D et ont trop de travail. Je pense que sa cause [QF] + matches QQ QQQ QF QQFF etc

Ce n'est pas aussi propre que je pourrais, mais comme les personnages sont toujours à cette place dans le message enregistré, il ne fait ce que je veux qu'il soit.

Je vais dans votre sous-expression et de voir ce qui se passe trop
  #4 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Registered User
  
 

Date d'inscription: avril 2008
Messages: 7
Pas de chance

Citation:
Posté par Aigles View Post
La syntaxe est valable:
Code:
FS  = "([[:space:]]|\\.|QF|=|x)+";

Citation:
Posté par Aigles View Post
La obtenir le dernier champ, sans préfixant chiffres:
Code:
last_field=$NF
sub(/^[0-9]*/, "", last_field);
Jean-Pierre.


Aucune de ces extraits fonctionné correctement pour moi. Le FS de syntaxe que vous utilisez probablement changé le nombre de champs et ils n'ont pas tous reçu imprimé.

Le deuxième extrait semble juste d'ajouter le n ° 1 à la dernière terrain c'est-à-dire (, 619MENCHIES1).

Je vais jouer avec un peu plus et voir ce qui se passe.
  #5 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Registered User
  
 

Date d'inscription: avril 2008
Messages: 7
Cool Alors, voici ce qui m'a finalement le résultat que je cherchais.

Code:
#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.
C'est un peu un kludge mais ça marche. Je ne pouvais pas paraître pour obtenir le last_field variable d'imprimer soit ce que j'ai fait en utilisant la simple commande d'impression, ce qui explique pourquoi je suis allé avec printf lieu. Cela m'a aussi permis de produire les résultats dans un format décimal, puisque ces chiffres avant la MENCHIES sont les montants en dollars.

Dernière édition par kinksville; au 04.25.2008 06:13 PM.. Motif: Enlevée nom complet de la commission.
Closed Thread

Bookmarks

Tags
awk, awk trim, trim, trim awk

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 06:06 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0