The UNIX and Linux Forums  

Go Back   UNIX e Linux Forum > Inizio Forum > Shell scripting e di programmazione
.
google unix.com



Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
Multiple separatori di campo in awk? (Prima uno spazio, quindi i due punti) doubleminus UNIX for Dummies Domande & Risposte 3 04-27-2008 04:28 PM
Ho bisogno di aiuto per contare i campi e separatori di campo utilizzando Nawk scrappycc Shell scripting e di programmazione 3 02-06-2008 11:47 PM
si può reindirizzare più file per l'ingresso? Matrix_Prime UNIX for Dummies Domande & Risposte 4 02-27-2005 07:07 PM
Awk più separatori di campo Tonka52 Shell scripting e di programmazione 7 04-07-2004 10:37 PM
Uscita dal campo di più file di database Dennz UNIX for Dummies Domande & Risposte 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 Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Utente Registrato
  
 

Iscriviti Data: aprile 2008
Interventi: 7
Cool Campo di input multiple Separatori in awk.

Ho visto un paio di posti qui referenziamento come gestire più di un separatore di campo di input in awk. I figured vorrei come parti I (solo!) Capito come attivare questa linea in un file di log:

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

in questo formato:

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

Ho un intero script poiché questo è solo un passo in un processo di trasformare tronchi in informazioni utili, ma la porzione heres.

# Autore: kinksville
Data: 24 aprile 2008
# Revisione: 24 aprile 2008
# Revisione: Revisione 1,00
# Altri file: cclookup.s, cclookup.rep
# Changelog:
# 24 aprile 2008: creazione iniziale dello script.
#
Fine # changelog.

BEGIN (
FS \u003d "[\. QF \ @ D \u003d x] +"
OFS \u003d ","
)
# Prima iterazione del D @ di ricerca, le stripping. carattere e l'inserimento di un OFS.
/ \ @ D / (# Cerca ogni riga contenente la stringa @ D
report2 \u003d "cclookup.rep2"; # define report2 variabile.
relazione \u003d "cclookup.rep"; # define rapporto variabile.
num_cclookup + +; # ArrivareProspettiPartner numero di richieste di autenticazione.
print $ 1, $ 2, $ 5, $ 6, $ 7, $ 8> relazione;
print $ 0> report2;
) # Fine del @ S ricerca.


La chiave è il fatto che awk accetta una espressione regolare come file separatore. Questa regexp FS \u003d "[\. QF \ @ D \u003d x] +" partite spazi, l'. QF la stringa, la stringa @ S, \u003d, e il carattere x. Il + dopo l'aggiunta di supporto è la chiave, dal momento che consente di 1 o più istanze di uno qualsiasi dei caratteri corrisponde la regexp.

Ciò significa che x e xxxxxx sono entrambi considerati come un unico separatore di campo.

Ho ancora bisogno di lavorare sulla produzione, dal momento che ora ho bisogno di tagliare fuori il nome alla fine del l'ultimo campo. Purtroppo, l'ultimo numero del campo può variare in qualsiasi punto da 9999999 a 1 e che è la parte che voglio conservare. Forse uno [^ 0-9] + espressione?
  #2 (permalink)  
Old 04-25-2008
aigles's Avatar
Aigles aigles is offline Forum Advisor  
Utente Registrato
  
 

Iscriviti Data: aprile 2004
Località: Bordeaux, Francia
Messaggi: 1.433
Sei sicuro che il tuo FS definizione è valida per la vostra esigenza?
Se non si definisce "@ D" e "QF" come separatori.
I caratteri @, D, D e F sono definire come separatori.

La sintassi è valida:

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

Il ottenere l'ultimo campo senza prefisso cifre:

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

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

Iscriviti Data: aprile 2008
Interventi: 7
Sono stato un po 'confuso dal fatto che QF e @ S sono troppo lavoro. Penso che la sua causa [QF] + partite QQ QQQ QF QQFF ecc

Non è così pulito come potrebbe, ma come quei personaggi che sono sempre a posto particolare nel messaggio registrato, in modo che non ciò che desidero.

I'll sub nella vostra espressione e di vedere cosa succede troppo
  #4 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Utente Registrato
  
 

Iscriviti Data: aprile 2008
Interventi: 7
Nessuna fortuna

Citazione:
Originalmente inviato da Aigles View Post
La sintassi è valida:

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

Citazione:
Originalmente inviato da Aigles View Post
Il ottenere l'ultimo campo senza prefisso cifre:

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

Jean-Pierre.


Nessuno di questi frammenti funzionato correttamente per me. La sintassi FS che è stato usato probabilmente cambiato il numero di campi e in modo che non tutte le ottenere stampati.

Il secondo frammento sembrava giusto per aggiungere il # 1 per l'ultimo campo ossia (, 619MENCHIES1).

Io gioco con ancora un po 'e vedere cosa succede.
  #5 (permalink)  
Old 04-25-2008
kinksville kinksville is offline
Utente Registrato
  
 

Iscriviti Data: aprile 2008
Interventi: 7
Cool Allora ecco cosa mi ha finalmente il risultato che stavo cercando.


Codice:
#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.

E 'un po' di un kludge ma funziona. Mi sembra che non poteva ottenere il last_field variabile per stampare non importa quello che ho fatto utilizzando il semplice comando di stampa, che è il motivo per cui mi è stata posta con printf invece. Che inoltre mi ha permesso di uscita dei risultati in un formato decimale in quanto tali numeri prima della MENCHIES sono stati dollaro importi.

Ultimo a cura di kinksville; al 04/25/2008 06:13 PM.. Motivo: Rimosso nome dalle osservazioni.
Closed Thread

Segnalibri

Tag
awk, awk trim, trim, trim awk

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 01:55 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0