The UNIX and Linux Forums  


Go Back   De Unix-en Linux Forum > Top Forums > Programmeren en Shell Scripting
.
google unix.com



Programmeren en Shell Scripting Post vragen over KSH, CSH, SH, Bash, Perl, PHP, sed, awk en andere shell scripts en shell scripting talen hier.

Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
Draad Thread Starter Forum Antwoorden Last Post
Meerdere gebied scheidingstekens in awk? (Eerste een spatie en vervolgens een dubbele punt) doubleminus UNIX voor Dummies Questions & Answers 3 04-27-2008 04:28 PM
Ik heb hulp nodig bij het tellen van de velden en veld met behulp van scheidingstekens Nawk scrappycc Programmeren en Shell Scripting 3 02-06-2008 11:47 PM
kan je stuurt meerdere bestanden voor de input? Matrix_Prime UNIX voor Dummies Questions & Answers 4 02-27-2005 07:07 PM
Awk Meerdere Veld Separators Tonka52 Programmeren en Shell Scripting 7 04-07-2004 10:37 PM
Multiple Output Veld uit databasebestand Dennz UNIX voor Dummies Questions & Answers 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 Zoeken in deze Thread Rate Thread Display Modes
  #1 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Geregistreerde gebruiker
  
 

Join Date: april 2008
Posten: 7
Cool Meerdere invoerveld Separators in awk.

Ik zag een paar berichten hier referencement hoe te behandelen meer dan een input veld scheidingsteken in awk. Ik dacht dat ik zou delen hoe ik (net!) Bedacht hoe deze regel in een logfile beurt:

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

in dit formaat:

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

Ik heb een hele script want dit is slechts een stap in een proces van het omzetten van logt in nuttige informatie, maar heres het relevante deel.

# Auteur: kinksville
# Datum: 24 april 2008
# Herzien: 24 april 2008
# Wijziging: Herziening 1.00
# Andere bestanden: cclookup.s, cclookup.rep
# Changelog:
# 24 april 2008: Eerste oprichting van het script.
#
# Einde changelog.

BEGIN (
FS \u003d "[\. QF \ @ D \u003d x] +"
OFS \u003d ","
)
# Eerste iteratie van de @ D zoeken, de strippen. karakter en het plaatsen van een OFS.
/ \ @ D / (# Zoek voor een lijn die de string @ D
report2 \u003d "cclookup.rep2"; # define report2 variabele.
verslag \u003d "cclookup.rep"; # define verslag variabele.
num_cclookup + +; # Haal aantal auth verzoeken.
print $ 1, $ 2, $ 5, $ 6, $ 7, 8 dollar> verslag;
print $ 0> report2;
) # Einde van de @ D zoeken.


De belangrijkste is het feit dat awk zal instemmen met een reguliere expressie als bestand scheidingsteken. Dit regexp FS \u003d "[\. QF \ @ D \u003d x] +" komt overeen met ruimten, de. QF de string, de string @ D, \u003d, en het karakter x. De + na de afsluitende beugel is de sleutel, omdat die het mogelijk maakt voor 1 of meer exemplaren van een van de personages geëvenaard door de regexp.

Dat betekent dat x en xxxxxx zijn zowel behandeld als een enkel veld scheidingsteken.

Ik moet nog werken aan de uitgang, want nu moet ik de naam trim uit het einde van het laatste veld. Helaas is het nummer in het laatste veld kan overal bereik van 9999999 tot 1 en dat is het deel dat ik wil bewaren. Misschien een [^ 0-9] + meningsuiting?
  #2 (permalink)  
Old 04-25-2008
aigles's Avatar
aigles aigles is offline Forum Advisor  
Geregistreerde gebruiker
  
 

Join Date: april 2004
Locatie: Bordeaux, Frankrijk
Berichten: 1.429
Weet u zeker dat uw FS definitie geldig is voor uw behoefte?
U heeft geen "define @ D" en "QF" als scheidingstekens.
De tekens @, zijn D, Q en F definiëren als scheidingstekens.

De geldige syntaxis is:

Code:
FS  = "([[:space:]]|\\.|QF|=|x)+";

Het krijgt de laatste veld zonder prefixing cijfers:

Code:
last_field=$NF
sub(/^[0-9]*/, "", last_field);

Jean-Pierre.
  #3 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Geregistreerde gebruiker
  
 

Join Date: april 2008
Posten: 7
Ik was een beetje verward door het feit dat QF en @ D werkten ook. Ik denk dat zijn omdat [QF] + wedstrijden QQ QQQ QF QQFF enz.

Het is niet zo schoon als ik zou willen, maar die personages zijn altijd op die bepaalde plaats in de ingelogd bericht, dus het doet wat ik wil.

I'll sub in je expressie en zie wat er gebeurt ook
  #4 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Geregistreerde gebruiker
  
 

Join Date: april 2008
Posten: 7
Geen geluk

Citaat:
Oorspronkelijk geplaatst door aigles View Post
De geldige syntaxis is:

Code:
FS  = "([[:space:]]|\\.|QF|=|x)+";

Citaat:
Oorspronkelijk geplaatst door aigles View Post
Het krijgt de laatste veld zonder prefixing cijfers:

Code:
last_field=$NF
sub(/^[0-9]*/, "", last_field);

Jean-Pierre.


Geen van deze fragmenten werkte goed voor mij. De FS syntaxis die u gebruikt waarschijnlijk veranderd het aantal velden en zodat ze niet allemaal kreeg afgedrukt.

Het tweede fragment leek toe te voegen de # 1 van het laatste veld dwz (, 619MENCHIES1).

Ik zal spelen met het wat meer en zien wat er gebeurt.
  #5 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Geregistreerde gebruiker
  
 

Join Date: april 2008
Posten: 7
Cool Dus hier is wat mij eindelijk het resultaat ik zocht.


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.

Het is een beetje een kludge maar het werkt. Ik kon niet lijken te krijgen van de last_field variabele af te drukken niet uit wat ik deed met behulp van de vlakte print commando, dat is de reden waarom ik uiteindelijk ging met printf plaats. Ook dat kon ik de uitgang van de resultaten in een decimaal formaat omdat die nummers voor de MENCHIES werden dollar bedragen.

Laatst bewerkt door kinksville; op 04.25.2008 06:13 PM.. Reden: Removed volledige naam van de opmerkingen.
Closed Thread

Bladwijzers

Labels
awk, awk trim, trim, trim awk

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Aan




Alle tijden zijn GMT -4. Het is nu 10:24.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De Unix-en Linux Forums Copyright © 1993-2009. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0