The UNIX and Linux Forums  
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.

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.

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 11-17-2008
timj123 timj123 is offline
Utente Registrato
  
 

Iscriviti Data: gennaio 2008
Posti: 80
Aiuto con funzioni di awk

Ho un problema con il mio script. Si lavora per la maggior parte, ma non è molto
portatile. Esempio campione è al di sotto di "file di input" e copia e incolla di "script.

Lo script funziona bene se il seguente sistema porzioni sono outputted come segue:

SISTEMA CFO è seguita da SISTEMA DAX
SISTEMA DAX è seguita da TC SISTEMA
TC SISTEMA STETEM è seguita dalla seconda

In diverse unità di alcune delle parti del sistema non sono nella stessa outputted
o per alcune parti del sistema non sono outputted a tutti.

La mia domanda è: come posso modificare awk funzioni per interrompere l'elaborazione in un unico sistema
e iniziare il trattamento sul prossimo sistema quando parte il prossimo sistema porzione
non è elencato nella stessa porzione, esempio di funzione (DAX):
Codice:
   while (( getline > 0 ) && ( $3 != "TC" )) {
In linea di codice, $ 3 TC è la prossima parte del sistema, che racconta la funzione di interrompere il trattamento.

Qui è campione del file di input:

Codice:
doal   cont   pegc   system1   call7   solh
RX SYSTEM CFO
DATE 322:47:34

DPORQ = 0        TTORQ = 0        DPINRQ= 0
MFINRQ= 0        CDIRR = 0        TCBSY = 0
TCINT = 0        TCANS = 0        TCRNG = 0
RPINRQ= 0        C6INRQ= 0        ISUPRQ= 11147
TUPRQ = 0        MFOURQ= 0        C6OURQ= 0
ISUPOR= 17417    BICCRQ= 0        BICCOR= 0
POVFL = 0

doal   cont   pegc   system1   call7   solh
RX SYSTEM DAX
DATE 322:47:34

proc   cpu    systm    load     sactv    orig    ovldpu   mmst
1      0        0        0        0        0        0        0
2      0        0        0        0        0        0        0
3      0        0        0        0        0        0        0
4      0        0        0        0        0        0        0
5      0        0        0        0        0        0        0
6      0        0        0        0        0        0        0
7      0        0        0        0        0        0        0
8      0        0        0        0        0        0        0
9      0        0        0        0        0        0        0
10     0        0        0        0        0        0        0
11     0        0        0        0        0        0        0

doal   cont   pegc   system1   call7   solh
RX SYSTEM TC
DATE 322:47:34

proc     pucco    load     chgro    chmert   chinc    chout    ceqpu
22       2        97       0        0        2707     6374     0
1        3        15011    0        0        2717     6651     0
2        3        12976    0        0        2139     6137     0
3        3        13898    0        0        2199     6583     0
4        3        15123    0        0        2478     7788     0
5        3        13823    0        0        2645     5789     0
Qui è campione di script:
Codice:
/usr/xpg4/bin/awk '

$3 == "CFO"    { cFO() } 
$3 == "DAX"    { dAX() } 
$3 == "TC"     { tC()  } 


function dAX(     _xm)
{
   while (( getline > 0 ) && ( $3 != "TC" )) {

do a a lot of awk stuff here....
.
.
.
.
.
   }
}

function tC(     _msx)
{
   while (( getline > 0 ) && ( $3 != "OND" )) {

do a a lot of awk stuff here....
.
.
.
.
.
   }
}

function cFO(     _iu)
{
   while (( getline > 0 ) && ( $3 != "DAX" )) {

do a a lot of awk stuff here....
.
.
.
.
.
   }
} FILENAME
Grazie in anticipo.
  #2 (permalink)  
Old 11-18-2008
timj123 timj123 is offline
Utente Registrato
  
 

Iscriviti Data: gennaio 2008
Posti: 80
C'è forse un modo per leggere tutto il file in prima per determinare prossimo sistema sezione? Sono stato a voler evitare di fare questo, perché i file sono davvero grandi.
  #3 (permalink)  
Old 11-19-2008
Annihilannic Annihilannic is offline Forum Advisor  
  
 

Iscriviti Data: maggio 2008
Località: Sydney, Australia
Interventi: 1.009
Perché non basta cambiare la condizione in cui si ferma, cioè quando si preme il "doal" linea?

Codice:
    while (getline && $1 != "doal") {
Se avete bisogno di fare ogni operazione di trasformazione del "doal" contenuti in rete è possibile farlo solo dopo il ciclo while.
  #4 (permalink)  
Old 11-19-2008
timj123 timj123 is offline
Utente Registrato
  
 

Iscriviti Data: gennaio 2008
Posti: 80
Annihilannic,
Grazie per guardare prima a questo per me.

Ma, purtroppo, i dati mi è stato inviato solo un frammento di ciò che ho. Qualche volta i dati è il seguente:

Codice:
doal   cont   pegc   system1   call7   solh
RX SYSTEM CFO
DATE 322:47:34

DPORQ = 0        TTORQ = 0        DPINRQ= 0
MFINRQ= 0        CDIRR = 0        TCBSY = 0
TCINT = 0        TCANS = 0        TCRNG = 0
RPINRQ= 0        C6INRQ= 0        ISUPRQ= 11147
TUPRQ = 0        MFOURQ= 0        C6OURQ= 0
ISUPOR= 17417    BICCRQ= 0        BICCOR= 0
POVFL = 0

doal   cont   pegc   system1   call7   solh
RX SYSTEM CFO
DATE 322:47:34

DPORQ = 0        TTORQ = 0        DPINRQ= 0
MFINRQ= 0        CDIRR = 0        TCBSY = 0
TCINT = 0        TCANS = 0        TCRNG = 0
RPINRQ= 0        C6INRQ= 0        ISUPRQ= 11158
TUPRQ = 0        MFOURQ= 0        C6OURQ= 0
ISUPOR= 17459    BICCRQ= 0        BICCOR= 0
POVFL = 0

doal   cont   pegc   system1   call7   solh
RX SYSTEM DAX
DATE 322:47:34

proc   cpu    systm    load     sactv    orig    ovldpu   mmst
1      0        0        0        0        0        0        0
2      0        0        0        0        0        0        0
3      0        0        0        0        0        0        0
4      0        0        0        0        0        0        0
5      0        0        0        0        0        0        0
6      0        0        0        0        0        0        0
7      0        0        0        0        0        0        0
8      0        0        0        0        0        0        0
9      0        0        0        0        0        0        0
10     0        0        0        0        0        0        0
11     0        0        0        0        0        0        0
E ho bisogno di entrambe le sezioni processo come uno. Ma l'avete fatto, mi dia una idea su come risolvere il resto, se possibile. C'è un modo per testare la linea di seguito senza fare qualsiasi trattamento su tale linea? Cercherò di spiegare il presente testate codice:

Codice:
while (( getline > 0 ) && ( $1 != "doal" ) && ( getline ; $3=! "CFO"))
Che cosa sto cercando di dire è, è possibile eseguire la prova al di sotto dei $ 3 "doal" linea?
  #5 (permalink)  
Old 11-19-2008
Annihilannic Annihilannic is offline Forum Advisor  
  
 

Iscriviti Data: maggio 2008
Località: Sydney, Australia
Interventi: 1.009
È difficile per una consulenza senza sapere che cosa sta facendo il codice all'interno mentre quelle loop, ma nella sua posizione vorrei cercare di evitare di utilizzare completamente, e fare qualcosa di più simile a questo:

Codice:
awk '
        /^RX SYSTEM/ { section=$3 }
        section=="CFO" {
                print "processing CFO stuff: " $0
        }
        section=="DAX" {
                print "processing DAX stuff: " $0
        }
        section=="TC" {
                print "processing TC stuff: " $0
        }
' inputfile > outputfile
E 'possibile "guardare avanti" alle successive linee di memorizzare ogni riga, come si legge in una variabile, e l'elaborazione dei dati memorizzati nella variabile quando si legge la riga successiva, con la leggera complicazione che avete bisogno per gestire l'ultima riga dei dati nel FINE () clausola del vostro script.
Closed Thread

Segnalibri

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 è 05:20 AM.


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