Page 1 sur 1

[R] [..] Equivalent de GREP, SED, CUT, etc

Posté : lun. 13 sept. 2010 12:00
par tibal
Bonjour à tous,

Je fais mes premiers pas sur Autoit et suis habitué au shell Unix/Linux. Je suis à la recherche de correspondances pour des utilitaires tels que GREP, SED, CUT, etc ou tout utilitaire Unix/Linux.

Merci par avance pour votre aide.

Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : lun. 13 sept. 2010 18:42
par Tlem
Bonjour tibal.
AutoIt est un utilitaire qui fonctionne sous Windows.
Ce qui fait que les commandes Unix dont vous parlez ne sont pas forcément connues par les membres de ce forum.
Il serait donc plus judicieux que vous donniez le maximum d'informations sur ces commandes (liens ou descriptions) afin d'éviter à celui qui veut vous aider, de perdre du temps en recherches.

Les commandes Unix étant très puissantes, vous ne trouverez sans doute pas l'exacte équivalence en AutoIt, mais quelques lignes de code bien argumentées feront très largement l'affaire.

Donnez nous des exemples concrets de ce que vous cherchez à faire, afin d'éviter une multitude de messages inutiles en demande d'explications divers et variées.

Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : lun. 13 sept. 2010 18:51
par sylvanie
Bonjour,
pour apporter un début de réponse
sed : cf stringreplace et surtout stringregexpreplace
cut : stringsplit

pour grep, il faudra coder une fonction à base de findfilefirstfile et findfilenextfile pour le parcours, puis filread/filereadline et enfin stringinstr ou (surtout) stringregexp. Mais à mon avis les perfs vont s'écrouler (en utilitaire autre que Autoit sous windows je préconiserai Textcrawler)

Bonne continuation

Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : lun. 13 sept. 2010 19:56
par tibal
Bonsoir et merci à Tlem et Sylvanie.

En fait, je souhaite faire deux boucles WHILE imbriquée, chacune parsant un fichier et pour chaque ligne extraite, je souhaite récuoérer le champs particulier. J'ai commencé à coder ça, mais ne suis pas sûre que le code soit optimale, et par ailleurs, la boucle interne devrait être exécutée autant de fois que la boucle externe a de lignes. Le problème est qu'elle ne s'exécute qu'une fois et que seule la boucle externe parse toutes les lignes de mon fichier. J'ai passé ma boucle interne par une fonction mais ça n'y change rien.

Je vous poste mon code, ça sera plus parlant :

Code : Tout sélectionner

#include <String.au3>
#include <Array.au3>
#include <file.au3>

If ( $CmdLine[0] <> 0 ) Then
    MsgBox(0,"Argument","Argument present")
Else
    MsgBox(0,"Argument","Argument manquant. Sortie du script")
    Exit
EndIf

Dim $VERSION = $CmdLine[1]
Dim $REP_RACINE = "C:\SCRIPT\AUTOIT"
Dim $SERVER_LIST = $REP_RACINE & "\server_list.list"
Dim $CONCESSION_LIST = $REP_RACINE & "\concession.list"
Dim $REP_DEST = $REP_RACINE
Dim $PATCH = $REP_RACINE & "\SOURCE\" & $VERSION & ".zip"
Dim $SERVER_LIST_LINE
Dim $CONCESSION_LIST_LINE
Dim $NB_SERVERS
Dim $COUNT_SERVER
Dim $NB_CONCESSIONS = 0
Global $COUNT_CONCESSIONS = 0

$SERVER_LIST_FILE = FileOpen($SERVER_LIST,0)
$CONCESSION_LIST_FILE = FileOpen($CONCESSION_LIST,0)

$NB_SERVERS = _FileCountLines($SERVER_LIST)
$NB_CONCESSIONS = _FileCountLines($CONCESSION_LIST)

MsgBox(0,"Nb Serveurs",$NB_SERVERS)
MsgBox(0,"Nb Concessions",$NB_CONCESSIONS)

If $SERVER_LIST_FILE = -1 Then
    MsgBox(0,"Ouverture de Fichier","Erreur lors de l'ouverture du fichier : " & @CRLF & $SERVER_LIST_FILE)
    Exit
EndIf
If $CONCESSION_LIST_FILE = -1 Then
    MsgBox(0,"Ouverture de Fichier","Erreur lors de l'ouverture du fichier : " & @CRLF & $CONCESSION_LIST_FILE)
    Exit
EndIf

While $COUNT_SERVER < $NB_SERVERS
    $SERVER_LIST_LINE = FileReadLine($SERVER_LIST_FILE)
    If @error = -1 Then ExitLoop
    If StringInStr($SERVER_LIST_LINE,"PROD") Then
        $SERVER = _StringBetween($SERVER_LIST_LINE,"PROD ","")
        MsgBox(0,"Variable LINE",$SERVER[0])
        $COUNT_CONCESSIONS = 0
        MsgBox(0,"$COUNT_CONCESSIONS avant _FCT_CONCESSION",$COUNT_CONCESSIONS )
        _FCT_CONCESSION()
        MsgBox(0,"$COUNT_CONCESSIONS apres _FCT_CONCESSION",$COUNT_CONCESSIONS )
    EndIf
    $COUNT_SERVER = $COUNT_SERVER + 1
WEnd

Func _FCT_CONCESSION()
    While $COUNT_CONCESSIONS < $NB_CONCESSIONS
        $CONCESSION_LIST_LINE = FileReadLine($CONCESSION_LIST_FILE)
        If @error =  -1 Then ExitLoop
        If StringInStr($CONCESSION_LIST_LINE,"FRF") Then
            $CONCESSION = $CONCESSION_LIST_LINE
            MsgBox(0,"Concession","Serveur : " & $SERVER[0] & @CRLF & "Concession : " & $CONCESSION)
        EndIf
        $COUNT_CONCESSIONS = $COUNT_CONCESSIONS + 1
    WEnd
EndFunc

FileClose($SERVER_LIST_FILE)
FileClose($CONCESSION_LIST_FILE)
 

Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : lun. 13 sept. 2010 20:36
par Tlem
Ce code est totalement abstrait pour ceux qui ne connaissent pas les fichiers traités et le résultat attendu.
Dites nous ce que vous avez, et ce que vous voulez.

Ensuite, en ce qui concerne le code, la logique voudrait que le test d'ouverture du fichier soit fait après le FileOpen et qu'en cas d'erreur le script s'arrête (inutile de faire des choses qui n'aboutiront pas ...).

Ensuite, d'après la première boucle, vous cherchez à faire un traitement sur des lignes contenant l'expression "PROD ".
Il serait peut être judicieux de lire le fichier rapidement à la recherche de ces lignes, en les plaçant dans un tableau afin de les traiter dans l'autre boucle, mais cela dépend de ce que vous cherchez à faire.

Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : mar. 14 sept. 2010 08:37
par tibal
En effet Tlem, j'ai oublié de vous fournir les fichiers parsés. En le contenu :

Fichier server_list.list :

Code : Tout sélectionner

PROD SERVER7
TEST SERVER8
PROD SERVER9
PROD SERVER10
PROD SERVER11
PROD SERVER12
PROD SERVER13
Fichier concession.list :

Code : Tout sélectionner

CONCESSIONBE01
CONCESSIONFR01
CONCESSIONFR13
CONCESSIONFR18
CONCESSIONFR20
CONCESSIONFR21
CONCESSIONFR27
CONCESSIONFR28
CONCESSIONFR31
CONCESSIONFR33
CONCESSIONFR37
CONCESSIONFR44
CONCESSIONFR45
CONCESSIONFR51
CONCESSIONFR53
CONCESSIONFR57
CONCESSIONFR59
CONCESSIONFR67
CONCESSIONFR69
CONCESSIONFR72
CONCESSIONFR73
CONCESSIONFR74
CONCESSIONFR77
CONCESSIONFR78
CONCESSIONFR782
CONCESSIONFR80
CONCESSIONFR84
CONCESSIONFR91
CONCESSIONFR92
CONCESSIONFR94
CONCESSIONFR95
CONCESSIONFRF01
CONCESSIONFRF02
CONCESSIONFRP01
CONCESSIONFRP02
En fait, je dois boucler sur chaque second champs des lignes du fichier server_list.list où le premier champs correspond à PROD. Ensuite, pour chaque itération de la boucle précédente, je dois boucler sur chaque ligne du fichier concession.list. Ensuite, pour chaque itération de la boucle interne, je dois faire un NET USE sur chaque serveur et décompresser un fichier dans chaque répertoire correspondant à la liste des concessions, via UNZIP.

Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : mar. 14 sept. 2010 09:14
par Tlem
Avec AutoIt, il est possible de prendre les choses de différentes manières.
En ce qui me concerne, je lirais le fichier server_list.list ligne par ligne à la recherche du terme PROD et je construirais un tableau simple de ce genre

Code : Tout sélectionner

SERVER7
SERVER9
SERVER10
SERVER11
SERVER12
SERVER13
Ensuite je mettrais concession.list directement en tableau, avec la commande appropriée. ;)

Ce qui nous donne donc deux tableaux ...
Après, rien de plus simple que de faire deux boucles FOR imbriquées pour effectuer les commandes nécessaires. ;)

Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : mar. 14 sept. 2010 09:21
par tibal
Merci Tlem. Je vais suivre votre conseil.

Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : mer. 15 sept. 2010 20:40
par sylvanie
pour la mise en tableau, je préconiserai stringregexp, car celà a l'avantage de filtrer.
par exple :
► Afficher le texte

[C] Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : ven. 17 sept. 2010 11:52
par tibal
Merci à tous.
:D

Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : ven. 17 sept. 2010 18:48
par Tlem
N'oubliez pas la balise [R] dans le titre de votre premier message si votre sujet est résolu.

[R] Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : ven. 17 sept. 2010 19:24
par tibal
Ok Tlem.

Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : ven. 17 sept. 2010 20:34
par Tlem
ha !
Vous aussi, vous avez des problèmes avec la lecture du texte en rouge ... ?

[R] Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : sam. 18 sept. 2010 13:06
par tibal
Bonjour Tlem,
J'ai ajouté la balise [R] comme vous me l'avez rappelé. Ai-je oublié autre chose ?

Re: [..] Equivalent de GREP, SED, CUT, etc

Posté : sam. 18 sept. 2010 13:11
par Tlem
Ouaip ...

Je ré-écrit la phrase ci-dessous. Lisez attentivement ce qui est en rouge :
N'oubliez pas la balise [R] dans le titre de votre premier message si votre sujet est résolu.

Re: [R] [..] Equivalent de GREP, SED, CUT, etc

Posté : sam. 18 sept. 2010 14:24
par tibal
Ca y est.
Je ferai mieux sur mon prochain post.
Merci encore.

:)

Re: [R] [..] Equivalent de GREP, SED, CUT, etc

Posté : sam. 18 sept. 2010 22:31
par Tlem
tibal a écrit :Je ferai mieux sur mon prochain post.
Et sur tous les suivants, ce serait sympa. ;)