![]() |
Bonjour et bienvenu par les États-Unis à la UNIX et Linux Forums! Merci de votre visite et vous joindre à notre communauté mondiale.
|
|
google unix.com
|
|||||||
| Forums | S'inscrire | Forum Rules | Liens | Albums | FAQ | Liste des membres | Calendrier | Recherche | Aujourd'hui, les postes | Marquer les forums comme lus |
| 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. |
![]() |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread | Rate Thread | Modes d'affichage |
|
|
|
||||
|
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" )) {
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 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
|
|
||||
|
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") {
|
|
||||
|
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 Code:
while (( getline > 0 ) && ( $1 != "doal" ) && ( getline ; $3=! "CFO")) |
|
||||
|
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
|
![]() |
| Bookmarks |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|