Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 08/01/2016, à 11:26

tiramiseb

Re : Remplacement récurrent

Oui, clairement ça ne dépend pas de nous.

Mais « je ne maîtrise pas bien le shell » ça ne me met pas en confiance.

sed, awk, ce sont des outils complexes (pas pour rien que j'ai écrit un article dédié rien qu'à eux dans un linux mag... 9 pages pour une simple introduction très basique).

À mon sens, même sans connaître Python on comprend mieux mon script en #6 que le truc awk en #7.
Sachant qu'en plus, ce truc en #7 il faut le compléter avec la liste des noms de systèmes, etc... gloubiboulga, tout ça tout ça... et aucune assurance que ça fonctionnera toujours.
Si jamais un ";" apparaît dans le premier champ, ça cassera les propositions basées sur awk ou sur cut vues ci-dessus. Ça ne cassera pas le script Python, qui lit bien ce fichier comme un csv. Ça ne casserait pas non plus une solution avec csvkit, mais je ne vois vraiment pas l'intérêt de passer par cet outil dans ce cas-là...

Hors ligne

#27 Le 08/01/2016, à 11:32

claudius01

Re : Remplacement récurrent

Mais je suis entièrement d'accord avec toi tiramiseb, nous ne sommes que des catalyseurs ni plus ni moins...

Hors ligne

#28 Le 08/01/2016, à 11:37

Tenebrae

Re : Remplacement récurrent

claudius01 a écrit :

J'en suis conscient @ "as-tu conscience que l'outil que tu proposes, csvkit, ..." mais je tiens compte de: "De plus, je ne maitrise pas bien Shell et pas du tout Python" écrit par notre ami Tenebrae à qui on pourrait répondre et conseiller: C'est l'occasion de s'y mettre [à Python] mais cela ne dépend pas de nous...

Je vous remercie de tout vos bons conseils.
Je ne suis pas imperméable à l'apprentissage d'un "nouveau" langage (qui de ce que j'en sais est très performant). Mais à la base, je me suis mis au bash pour traiter des fichiers en amont d'un traitement PHP et MySQL.
Donc, j'ai pris ce qui me semblais le plus simple car c'est ce qu'on m'a conseillé il y a 2 mois. (j'avais jamais eu besoins de bosser en mode console avant... hmm)
Je ne parle pas ici en spécialiste de telle ou telle techno. smile

Hors ligne

#29 Le 08/01/2016, à 11:39

tiramiseb

Re : Remplacement récurrent

Tenebrae: pour des traitements de base, les shellscripts c'est bien. Mais dès qu'il s'agit de traiter des formats spécifiques (ici, le CSV), il vaut mieux utiliser des outils mieux adaptés.

Je propose Python parce que :
* je le connais bien
* il inclut en standard un parseur CSV
* il est installé par défaut sur plein de systèmes
* il est facile à comprendre même si on ne le connaît pas

D'autres langages incluent un support de CSV tout aussi bon, mais je ne les connais pas et ils ne sont pas nécessairement aussi simples à comprendre.

Corrigez-moi si je me trompe, mais le code que j'ai mis en #6 est plutôt clair et facile à comprendre même si on ne connaît pas du tout Python, non ?

Hors ligne

#30 Le 08/01/2016, à 11:42

Tenebrae

Re : Remplacement récurrent

tiramiseb a écrit :

Corrigez-moi si je me trompe, mais le code que j'ai mis en #6 est plutôt clair et facile à comprendre même si on ne connaît pas du tout Python, non ?

Il me parait simple et attrayant smile

Hors ligne

#31 Le 08/01/2016, à 11:44

tiramiseb

Re : Remplacement récurrent

ET bien voilà !

PYTHON, C'EST BIEN ! cool

Hors ligne

#32 Le 08/01/2016, à 11:48

claudius01

Re : Remplacement récurrent

Tenebrae, soit rassuré ... Python: L'essayer c'est L'adopter ;-).

Hors ligne

#33 Le 08/01/2016, à 11:59

Tenebrae

Re : Remplacement récurrent

claudius01 a écrit :

Tenebrae, soit rassuré ... Python: L'essayer c'est L'adopter ;-).

Un livre à conseiller ou des sites??

Hors ligne

#34 Le 08/01/2016, à 12:15

tiramiseb

Re : Remplacement récurrent

cherche "learning python" sur google, il y a plein de ressources...

Hors ligne

#35 Le 08/01/2016, à 15:31

Watael

Re : Remplacement récurrent

Mais à la base, je me suis mis au bash pour traiter des fichiers en amont d'un traitement PHP et MySQL.

et, tu t'es renseigné sur les capacités de PHP à traîter des fichiers CSV ? quitte à simplifier le nombre de langages utilisés...

le problème apparent de ce fichier est l'imbrication du séparateur dans ses champs, mais le premier champ ne contient pas le séparateur*...
Oui, tiramiseb, le python, c'est bon; n'empêche que pour extraire un premier champ*...

sed -n 's/^"\([^"]*\)";.*/\1/p' fichier.csv

et on n'en parle plus. big_smile

*je ne radote pas, je me répète !
*je ne radote pas, je me répète !
*je ne radote pas, je me répète !
lol


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#36 Le 08/01/2016, à 15:45

tiramiseb

Re : Remplacement récurrent

et, tu t'es renseigné sur les capacités de PHP à traîter des fichiers CSV ? quitte à simplifier le nombre de langages utilisés...

Pas faux. PHP peut très bien faire le job.

mais le premier champ ne contient pas le séparateur*...

Aujourd'hui, oui. Et demain ?

sed -n 's/^"\([^"]*\)";.*/\1/p' fichier.csv

C'est pas un peu imbitable, ça ? smile
... surtout comparé à :

for row in lines:
    print row[0]

(et si le format des séparateurs change, dans le code Python c'est juste un argument clair à modifier)
tongue

Dernière modification par tiramiseb (Le 08/01/2016, à 15:46)

Hors ligne

#37 Le 08/01/2016, à 16:26

Tenebrae

Re : Remplacement récurrent

Bon!
En me basant sur ce qui était proposé dans le post #7, j'ai pondu quelque chose qui niveau pref est beaucoup plus rapide.
dans mon fichier de traitement :

awkFileCmd="${PATH_SCRIPTS}change_to_os.awk"
awk -f "${awkFileCmd}" "${sOutputFile}"\
    | sort -t ';' -k 1,1 \
    > "${sTempFile}"
mv "${sTempFile}" "${sOutputFile}"

et dans mon fichier de "command" change_to_os.awk

BEGIN {
    FS=";"
    OFS=";"
}
{
    if ( match($2, /.*Windows NT 10.*/) ) aSysteme[$1]="Windows 10";
    else if ( match($2, /.*Windows NT 6.4*/) ) aSysteme[$1]="Windows 10";
    else if ( match($2, /.*Windows NT 6.3*/) ) aSysteme[$1]="Windows 8.1";
    else if ( match($2, /.*Windows NT 6.2*/) ) aSysteme[$1]="Windows 8";
    else if ( match($2, /.*Windows NT 6.1*/) ) aSysteme[$1]="Windows Seven";
    else if ( match($2, /.*Windows NT 6.0*/) ) aSysteme[$1]="Windows Vista";
    else if ( match($2, /.*Windows NT 5.2*/) ) aSysteme[$1]="Windows Server 2003";
    else if ( match($2, /.*Windows NT 5.1*/) ) aSysteme[$1]="Windows XP";
    else if ( match($2, /.*Windows NT 5.0*/) ) aSysteme[$1]="Windows 2000";
    else if ( match($2, /.*Windows NT*/) ) aSysteme[$1]="Windows NT";
    else if ( match($2, /.*Windows 98*/) ) aSysteme[$1]="Windows 98";
    else if ( match($2, /.*iPhone OS*/) ) aSysteme[$1]="iOS (iPhone)";
    else if ( match($2, /.*iPad*/) ) aSysteme[$1]="iOS (iPad)";
    else if ( match($2, /.*Macintosh*/) ) aSysteme[$1]="Intel Mac OS";
    else if ( match($2, /.*Android*/) ) aSysteme[$1]=="Adroid";
    else if ( match($2, /.*SunOS*/) ) aSysteme[$1]="Sun OS";
    else if ( match($2, /.*Fedora*/) ) aSysteme[$1]="Fedora";
    else if ( match($2, /.*Haiku*/) ) aSysteme[$1]="Haiku";
    else if ( match($2, /.*Ubuntu*/) ) aSysteme[$1]="Linux Ubuntu";
    else if ( match($2, /.*Window*/) ) aSysteme[$1]="Windows";
    else if ( match($2, /.*iPhone*/) ) aSysteme[$1]="iPhone";
    else if ( match($2, /.*Mac*/) ) aSysteme[$1]="Mac OS";
    else if ( match($2, /.*Linux*/) ) aSysteme[$1]="Linux";
    else aSysteme[$1]="inconnu";
}
END {
    for ( md5 in aSysteme ) {
        print md5, "\""aSysteme[md5]"\""
    }
}

Voilà.

Dernière modification par Tenebrae (Le 08/01/2016, à 16:29)

Hors ligne

#38 Le 08/01/2016, à 16:29

tiramiseb

Re : Remplacement récurrent

C'que c'est moche smile

Ça donne quoi, en terme de perfs, le code en Python ?

Hors ligne

#39 Le 08/01/2016, à 16:50

Tenebrae

Re : Remplacement récurrent

tiramiseb a écrit :

C'que c'est moche smile

Question de point de vue, nan?
Je ne suis pas un expert, donc je suis pas vexé tongue

tiramiseb a écrit :

Ça donne quoi, en terme de perfs, le code en Python ?

Pas encore testé pour tout dire.

Hors ligne

#40 Le 08/01/2016, à 17:06

tiramiseb

Re : Remplacement récurrent

Question de point de vue, nan?

La beauté ou la mocheté de quelque chose, c'est toujours subjectif.

Pas encore testé pour tout dire.

Ça m'intéresse, un comparatif entre un code awk et un code python pour un truc comme ça.
(cela dit, le code awk ne prend pas du tout en compte le fait que c'est du csv, que les champs sont entourés de « " », qu'il peut y avoir des « ; » au sein d'eux, etc)

Hors ligne

#41 Le 08/01/2016, à 17:21

Watael

Re : Remplacement récurrent

quelles sont les probabilités de voir un point-virgule dans un MD5 ?

la solution d'un langage qui traite le CSV, en tant que tel, est pérenne.
pour ma part, je traite un fichier donné selon les consignes.


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#42 Le 08/01/2016, à 17:27

Tenebrae

Re : Remplacement récurrent

Watael a écrit :

quelles sont les probabilités de voir un point-virgule dans un MD5 ?

Aucune.
L'expression régulière qui valide un MD5 est : /[0-9a-fA-F]{32}/

Dernière modification par Tenebrae (Le 08/01/2016, à 17:28)

Hors ligne

#43 Le 08/01/2016, à 17:29

tiramiseb

Re : Remplacement récurrent

qui dit que ça va rester comme ça ad vitam æternam ? smile

J'aime bien les trucs pérennes, moi. Déformation professionnelle, peut-être...
Après tout, ça fait que 15 ans que je fais ce genre de choses, hein... tongue

Hors ligne

#44 Le 08/01/2016, à 17:44

Tenebrae

Re : Remplacement récurrent

tiramiseb a écrit :

qui dit que ça va rester comme ça ad vitam æternam ? smile

J'aime bien les trucs pérennes, moi. Déformation professionnelle, peut-être...
Après tout, ça fait que 15 ans que je fais ce genre de choses, hein... tongue

Je valide le principe de "pérennité".
Mais dans ce cas, n'ayant pas de connaissance en Python, je vais d'abord m'instruire pour être capable de maintenir.
Car Tant qu'à faire je pourrais sans doute tout reprendre en Python pour plus de cohérence.

Hors ligne

#45 Le 08/01/2016, à 17:47

Tenebrae

Re : Remplacement récurrent

tiramiseb a écrit :

ad vitam æternam

Sans vouloir défoncer une porte ouverte, je bosse dans l'informatique depuis 15 ans, et j'ai vu passer un grand nombre de langages ou de systèmes qui on presque tous été remplacer par d'autre sans compatibilité descendante...
Donc la notion de ad vitam æternam est très relative...

Dernière modification par Tenebrae (Le 08/01/2016, à 17:48)

Hors ligne

#46 Le 08/01/2016, à 17:57

tiramiseb

Re : Remplacement récurrent

Ouais pas faux big_smile
Cela dit, Python est quand même bien installé dans l'écosystème du libre.
Perl aussi, mais pour ma part je trouve Perl imbitable... smile

Hors ligne

#47 Le 08/01/2016, à 19:35

HP

Re : Remplacement récurrent

tiramiseb a écrit :

En même temps, vouloir bosser en XML, faut être maso... big_smile
JSON ftw !

+1


cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne

#48 Le 09/01/2016, à 06:51

pingouinux

Re : Remplacement récurrent

tiramiseb #46 a écrit :

Perl aussi, mais pour ma part je trouve Perl imbitable...

Entièrement d'accord avec toi; j'avais essayé de m'y mettre (il y a longtemps), mais n'ai jamais accroché.

Hors ligne