The UNIX and Linux Forums  

Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

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øg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 11-17-2008
timj123 timj123 is offline
Registreret Bruger
  
 

Join Date: Jan 2008
Stillinger: 80
Hjælp med awk funcions

Jeg har et problem med min script. Det virker for det meste, men er ikke meget
bærbare. Eksemplet er stikprøve af "input file" og klippe og indsætte af "script.

Scriptet arbejder bøde hvis følgende system portioner er outputted som følger:

SYSTEM CFO er efterfulgt af SYSTEM DAX
SYSTEM DAX er efterfulgt af SYSTEM TC
SYSTEM TC er efterfulgt af STETEM andet

På forskellige enheder nogle af System portioner er ikke outputted i samme
orden eller nogle af de System portioner er ikke outputted overhovedet.

Mit spørgsmål er, hvordan kan jeg ændre awk funktioner at stoppe behandlingen på ét system
og begynde behandling på næste system portion, når den næste system portion
er ikke nævnt i den del selv, f.eks funktionskontinuitet (DAX):

Code:
   while (( getline > 0 ) && ( $3 != "TC" )) {

I ovenstående linje kode, $ 3 TC er næste system portion, som fortæller funktion til at stoppe behandlingen.

Her er udsnit af input filen:


Code:
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

Her er udsnit af script:

Code:
/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

Thanks in advance.
  #2 (permalink)  
Old 11-18-2008
timj123 timj123 is offline
Registreret Bruger
  
 

Join Date: Jan 2008
Stillinger: 80
Er der en måde at måske læses i hele filen første til at bestemme næste system sektion? Jeg var der ønsker at undgå dette, fordi filerne er virkelig stort.
  #3 (permalink)  
Old 11-19-2008
Annihilannic Annihilannic is offline Forum Advisor  
  
 

Join Date: May 2008
Location: Sydney, Australien
Stillinger: 1009
Hvorfor gør du ikke bare ændre den tilstand, hvor den stopper, dvs når du trykker på "doal linie"?


Code:
    while (getline && $1 != "doal") {

Hvis du er nødt til at gøre enhver behandling af "doal linie" indhold kan du bare gøre det efter mens sløjfe.
  #4 (permalink)  
Old 11-19-2008
timj123 timj123 is offline
Registreret Bruger
  
 

Join Date: Jan 2008
Stillinger: 80
Annihilannic,
Første Tak for at se på dette for mig.

Men desværre er de data jeg indsendt kun var et uddrag af hvad jeg har. Undertiden er det tal er som følger:


Code:
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

Og jeg er nødt til at behandle begge dele som én. Men du gjorde give mig en idé om, hvordan andre om at løse, hvis muligt. Er der en måde at teste linjen nedenfor uden at gøre enhver behandling på denne linje??? Jeg vil prøve at forklare, om dette uafprøvede kode:


Code:
while (( getline > 0 ) && ( $1 != "doal" ) && ( getline ; $3=! "CFO"))

Det, jeg forsøger at sige, er, er det muligt at afprøve $ 3 under "doal linie"?
  #5 (permalink)  
Old 11-19-2008
Annihilannic Annihilannic is offline Forum Advisor  
  
 

Join Date: May 2008
Location: Sydney, Australien
Stillinger: 1009
Det er svært at rådgive dig uden at vide, hvad koden gør indeni dem, mens loops, men i din holdning, jeg vil forsøge at undgå at bruge dem fuldstændigt, og gøre noget mere på denne måde:


Code:
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

Det er muligt at "se fremad" på de efterfølgende linjer ved at gemme hver linje, som du læse det i en variabel, og behandlingen af data, der lagres i variablen, når du læser den efterfølgende linje med det lille komplikation, at du har brug for at håndtere den sidste linje af data i slutningen () klausul af dit script.
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 01:18 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0