![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrati | Regole Forum | Collegamenti | Album | FAQ | Members List | Calendario | Ricerca | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Cerca in questo Thread | Rate Thread | Modalità di visualizzazione |
|
|
|
||||
|
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? |
|
||||
|
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 ![]() |
|
||||
|
Nessuna fortuna
Citazione:
Citazione:
![]() 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. |
|
||||
|
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. |
![]() |
| Segnalibri |
| Tag |
| awk, awk trim, trim, trim awk |
| Thread Tools | Cerca in questo Thread |
| Modalità di visualizzazione | Vota questo thread |
|
|