![]() |
|
|
google unix.com
|
|||||||
| Forums | S'inscrire | Forum Rules | Liens | Albums | FAQ | Liste des membres | Calendrier | Recherche | Aujourd'hui, les postes | Marquer les forums comme lus |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread | Rate Thread | Modes d'affichage |
|
|
|
||||
|
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? |
|
||||
|
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 ![]() |
|
||||
|
Pas de chance
Citation:
![]() 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. |
|
||||
|
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.
Dernière édition par kinksville; au 04.25.2008 06:13 PM.. Motif: Enlevée nom complet de la commission. |
![]() |
| Bookmarks |
| Tags |
| awk, awk trim, trim, trim awk |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|