![]() |
|
|
google unix.com
|
|||||||
| Forums | Registreer | Forum Regels | Links | Albums | Veelgestelde vragen | Ledenlijst | Kalender | Zoeken | Today's Posts | Markeer forums als gelezen |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Zoeken in deze Thread | Rate Thread | Display Modes |
|
|
|
||||
|
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? |
|
||||
|
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 ![]() |
|
||||
|
Geen geluk
Citaat:
Citaat:
![]() 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. |
|
||||
|
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. |
![]() |
| Bladwijzers |
| Labels |
| awk, awk trim, trim, trim awk |
| Thread Tools | Zoeken in deze Thread |
| Display Modes | Beoordeel deze draad |
|
|