![]() |
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| Flera området separatorer i awk? (Först ett utrymme, sedan ett kolon) | doubleminus | UNIX for Dummies Frågor & Svar | 3 | 04-27-2008 03:28 |
| Jag behöver hjälp med att räkna de områden och området separatorer använder Nawk | scrappycc | Shell-programmering och Skript | 3 | 02-06-2008 11:47 |
| kan du rikta om flera filer för input? | Matrix_Prime | UNIX for Dummies Frågor & Svar | 4 | 02-27-2005 07:07 |
| Awk Flera Fält Separatorer | Tonka52 | Shell-programmering och Skript | 7 | 04-07-2004 09:37 |
| Produktionen Flera Fält från databasfil | Dennz | UNIX for Dummies Frågor & Svar | 3 | 09-01-2003 12:41 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
Jag såg ett par inlägg här referenser hur man kan hantera mer än en avgränsare inmatningsfältet i awk. Jag tänkte att jag skulle dela hur jag (bara!) Listat ut hur man förvandlar denna rad i en loggfil:
90000000000000000000010001 namn D0.90000000000103787900010001QF840840916070000007085814Y216254 @ D1111111111111111 \u003d 1107xxxxxxxxxxxxxxx x919MENCHIES i detta format: 90000000000000000000010001, namn, 840840916070000007085814Y216654, 1111111111111111,1107,919 MENCHIES Jag har en hel skript eftersom detta är bara ett steg i en process att förvandla loggar in användbar information, men Heres den aktuella delen. # Author: kinksville # Datum: 24 April, 2008 # Revised: April 24, 2008 # Revision: Revision 1,00 # Andra filer: cclookup.s, cclookup.rep # Changelog: # April 24, 2008: Inledande skapandet av skriptet. # # End changelog. BEGIN ( FS \u003d "[\. QF \ @ D \u003d x] +" OFS \u003d "" ) # Första iteration av @ D sökning, utelämnar. karaktär och infoga en OFS. / \ @ D / (# Du kan se alla rader som innehåller strängen @ D report2 \u003d "cclookup.rep2" # define report2 variabel. rapport \u003d "cclookup.rep" # define rapport variabel. num_cclookup + +; # Få antalet auth förfrågningar. print $ 1, $ 2, $ 5, $ 6, $ 7, 8 $> rapport; print $ 0> report2; ) # End of the @ D sökning. Nyckeln är att awk kommer att acceptera ett vanligt uttryck som fil separator. Detta regexp FS \u003d "[\. QF \ @ D \u003d x] +" matchar platser,. strängen QF, strängen @ D, \u003d, samt tecknet x. Det + efter det avslutande fästet är nyckeln, eftersom den möjliggör för 1 eller flera förekomster av något av de tecken som motsvaras av den regexp. Det betyder att x och xxxxxx är båda behandlas som ett enda fält separator. Jag måste fortfarande arbeta på produktionen, eftersom jag nu måste trimmas om namn från slutet av det sista fältet. Tyvärr har antalet i det sista fältet kan variera allt från 9999999 till 1 och det är den del som jag vill bevara. Kanske en [^ 0-9] + uttryck? |
|
||||
|
Jag blev lite förvirrad av att QF och @ D arbetade också. Jag tror det eftersom [QF] + matchar QQ QQQ QF QQFF etc.
Det är inte så ren som jag skulle vilja men dessa tecken är alltid på just den plats i den inloggade meddelandet, så det gör vad jag vill. Jag sub i ditt uttryck och se vad som händer alltför ![]() |
|
||||
|
No such luck
Citat:
Citat:
![]() Inget av dessa utdrag har fungerat för mig. FS syntax som du använde förmodligen ändrat antal områden och så de inte alla får skrivas ut. Andra sträng verkade bara lägga till # 1 att det sista fältet, dvs (, 619MENCHIES1). Jag ska leka med den lite mer och se vad som händer. |
|
||||
|
Kod:
#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.
Senast redigerad av kinksville; 04-25-2008 at 05:13.. Orsak: Tog bort fullständigt namn från kommentarer. |