The UNIX and Linux Forums  
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.

Go Back   UNIX och Linux Forum > Upp Forum > Shell-programmering och Skript
.
google unix.com



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

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 Sök i denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 04-25-2008
kinksville kinksville is offline
Registered User
  
 

Join Date: april 2008
Inlägg: 7
Cool Flera inmatningsfältet Separatorer i awk.

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?
  #2 (permalänk)  
Old 04-25-2008
aigles's Avatar
aigles aigles is online now Forum Advisor  
Registered User
  
 

Join Date: april 2004
Ort: Bordeaux, Frankrike
Inlägg: 1.418
Är du säker på att din FS definition är giltig för dina krav?
Du definierar inte "@ D" och "QF" som avgränsare.
Den caracters @, är definiera D, Q och F som avgränsare.

Den giltiga syntaxen är:
Kod:
FS  = "([[:space:]]|\\.|QF|=|x)+";
Det blir det sista fältet utan förutfastställa siffror:
Kod:
last_field=$NF
sub(/^[0-9]*/, "", last_field);
Jean-Pierre.
  #3 (permalänk)  
Old 04-25-2008
kinksville kinksville is offline
Registered User
  
 

Join Date: april 2008
Inlägg: 7
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
  #4 (permalänk)  
Old 04-25-2008
kinksville kinksville is offline
Registered User
  
 

Join Date: april 2008
Inlägg: 7
No such luck

Citat:
Ursprungligen postat av aigles View Post
Den giltiga syntaxen är:
Kod:
FS  = "([[:space:]]|\\.|QF|=|x)+";

Citat:
Ursprungligen postat av aigles View Post
Det blir det sista fältet utan förutfastställa siffror:
Kod:
last_field=$NF
sub(/^[0-9]*/, "", last_field);
Jean-Pierre.


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.
  #5 (permalänk)  
Old 04-25-2008
kinksville kinksville is offline
Registered User
  
 

Join Date: april 2008
Inlägg: 7
Cool Så här är vad som slutligen fick mig att det resultat jag var ute efter.

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.
Det är lite av en kludge men det fungerar. Jag kunde inte verkar få last_field variabel att skriva ut oavsett vad jag gjorde med slätten utskriftskommandot, vilket är anledningen till att jag till slut gick med printf istället. Det får mig också att produktionen resultat i en decimal form eftersom dessa siffror före MENCHIES var dollarn belopp.

Senast redigerad av kinksville; 04-25-2008 at 05:13.. Orsak: Tog bort fullständigt namn från kommentarer.
Closed Thread

Komihåglista

Taggar
awk, awk trim, trim, trim awk

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 02:25.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0