The UNIX and Linux Forums  
Bonjour et bienvenu par les États-Unis à la UNIX et Linux Forums! Merci de votre visite et vous joindre à notre communauté mondiale.

Go Back   Les systèmes UNIX et Linux Forums > Top Forums > De programmation et de script Shell
.
google unix.com



De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici.

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 Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 11-17-2008
timj123 timj123 is offline
Registered User
  
 

Join Date: Jan 2008
Posts: 80
Aide avec les fonctions awk

J'ai un problème avec mon script. Il travaille pour la plupart, mais n'est pas très
portable. Exemple ci-dessous un exemple de "input file" et de couper et coller du script.

Le script fonctionne très bien si les parties sont en sortie du système comme suit:

SYSTEME CFO est suivie par SYSTEME DAX
SYSTEME DAX est suivie par SYSTEME TC
SYSTEME TC est suivie par STETEM OND

Sur quelques-unes des différentes unités du système portions ne sont pas dans la même sortie
ordre ou certaines parties du système ne sont pas sortie du tout.

Ma question est comment puis-je modifier les fonctions awk pour arrêter le traitement sur un système
et de commencer le traitement de la prochaine portion du système lors de la prochaine partie du système
n'est pas répertorié dans la partie elle-même, l'exemple de la fonction (Dax):
Code:
   while (( getline > 0 ) && ( $3 != "TC" )) {
Dans la ligne de code ci-dessus, $ 3 TC est la prochaine partie du système, qui indique la fonction d'arrêter le traitement.

Voici un exemple de fichier d'entrée:

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
Voici un exemple de 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
Merci d'avance.
  #2 (permalink)  
Old 11-18-2008
timj123 timj123 is offline
Registered User
  
 

Join Date: Jan 2008
Posts: 80
Existe-t-il un moyen de peut-être lu dans tout le fichier afin de déterminer la prochaine section du système? Je voulais de ne pas faire cela parce que les fichiers sont très gros.
  #3 (permalink)  
Old 11-19-2008
Annihilannic Annihilannic is offline Forum Advisor  
  
 

Join Date: Mai 2008
Lieu: Sydney, Australie
Messages: 1009
Pourquoi ne pas changer l'état où il s'arrête, c'est-à-dire lorsque vous appuyez sur "doal ligne?

Code:
    while (getline && $1 != "doal") {
Si vous avez besoin de faire un traitement de la "doal ligne de contenu, vous pouvez le faire après la boucle while.
  #4 (permalink)  
Old 11-19-2008
timj123 timj123 is offline
Registered User
  
 

Join Date: Jan 2008
Posts: 80
Annihilannic,
Merci d'abord pour regarder ça pour moi.

Mais malheureusement, les données que j'ai posté n'est qu'un extrait de ce que j'ai. Parfois, les données sont comme suit:

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
Et j'ai besoin de traiter les deux parties comme une seule. Mais vous ne me donner une idée sur la manière dont le reste à résoudre, si possible. Existe-t-il un moyen de tester la ligne ci-dessous sans faire aucun traitement sur cette ligne? Je vais essayer d'expliquer sur ce code non testées:

Code:
while (( getline > 0 ) && ( $1 != "doal" ) && ( getline ; $3=! "CFO"))
Ce que j'essaie de dire, c'est qu'il est possible de test $ 3 ci-après le «doal ligne?
  #5 (permalink)  
Old 11-19-2008
Annihilannic Annihilannic is offline Forum Advisor  
  
 

Join Date: Mai 2008
Lieu: Sydney, Australie
Messages: 1009
Il est difficile de vous conseiller sans savoir ce que le code est fait dans les boucles while, mais, dans votre position et je voudrais essayer de les éviter complètement, et de faire quelque chose de plus à ceci:

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
Il est possible de "regarder vers l'avenir" à ses lignes de stockage de chaque ligne comme vous l'avez lu dans une variable, et le traitement des données stockées dans la variable lorsque vous lisez la suite, avec la légère complication que vous avez besoin pour gérer la dernière ligne des données dans la clause FIN () de votre script.
Closed Thread

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 10:56 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0