Re: [#!/fr] Perfectionner script awk

Page principale
Supprimer ce message
Répondre à ce message
Auteur: Simpsonus
Date:  
À: La liste francophone des scripts shell
Sujet: Re: [#!/fr] Perfectionner script awk
Voilà un petit awk qui devrait faire le boulot attendu :
créer un fichier trt.awk contenant :

#!/usr/bin/awk -f
BEGIN {regex="[0-9]{3}"}
/Remarks/{next}
/Group/ {print "\\section{"$0"}"}
$0 ~ regex {num=substr($0,match($0, regex),RLENGTH);
            split($0,tab,num);
            gsub(/^[ \t]+|[ \t]+$/,"",tab[1]);
            print "\\subsection{"tab[1]"}\\TestDetails{"num"}"                        
            }




ensuite faire le chmod qui va bien : chmod +x trt.awk

lancer la conversion avec la commande :

cat fichier_source | trt.awk > fichier_resultat


la ligne : >                           Tests                     EN
2591-                   Remarks
me pose un problème car elle contient aussi un nombre, je l'ai éjecté
en partant du principe qu'il y a le mot clé Remarks


Explication de la partie $0 ~ regex : si la ligne contient un nombre
d'au moins 3 chiffres ( [0-9]{3} ) on recherche ce nombre et on
l'affecte à la variable num, puis on découpe la ligne avec comme
séparateur le nombre trouvé, on récupère dans tab[1] le texte
précédant le nombre, le gsub sert à enlever les espaces au début et à
la fin de tab[1] et il ne reste plus qu'à afficher le résultat avec la
syntaxe souhaitée.

bon amusement ;-)



Le 10 mai 2012 07:21, Patrick Proniewski <patpro@???> a écrit :
> bonjour,
>
> ce n'est pas à moi qu'il faut écrire, mais à la liste ;)
>
> <script_shell_fr@???>
>
>
> On 09 mai 2012, at 19:07, Yves PETRONIN wrote:
>
>>
>> Après pas mal de difficultés, car je suis débutant, je suis parvenu avec de l'aide à extraire d'un fichier décrivant une suite d'essais (lui même extrait d'une norme) les éléments d'une séquence d'essais, et à les convertir en des commandes LaTeX, qui sont en fait des macros programmant la composition d'un document relatif aux essais de la norme.
>>
>> Il me reste 2 difficultés non résolues, et un peu d'aide encore me ferait du bien. Merci.
>>
>> 1 Je voudrais, dans le fichier cible (de commandes LateX) mettre un espace entre "Group" et le N° du groupe, et obtenir par exemple \section{Group 0}  et non \section{Group0}
>> 2 Je voudrais dans le fichier cible obtenir dans le titre XXXXXX de chaque commande \subsection{XXXXXX} la totalité de la description de l'essai et non comme maintenant, la description plus ou moins tronquée selon le nombre de champs du texte, (problème de séparateur que je n'ai pu régler...)  et donc obtenir par exemple:
>>
>> \subsection{Examination of dimensions and mass} \TestDetails{102}
>>
>> au lieu de
>>
>> "\subsection{Examination       of} \TestDetails{102}"
>>
>>
>>
>> #Début fichier source
>>                                                   Table 6
>>
>>                           Tests                     EN 2591-                   Remarks
>>
>>                                                                All models
>>     Group 0
>>     Visual examination                                101
>>     Examination of dimensions and mass                102      To be performed on one pair per layout, in
>>                                                                sealed and un-sealed versions
>>     Contact insertion and extraction forces           412      To be performed on one pair per layout, in
>>                                                                sealed and un-sealed versions
>>     Measurement of insulation resistance              206      Only specimens of group 6
>>     Voltage proof test                                207      Only specimens of group 6
>>     Contact resistance - Low level                    201
>>     Contact resistance at rated current               202
>>     Mating and unmating forces                        408      On specimens of groups 2, 4 and 6
>>     Visual examination                                101
>>     Group 1
>>     Rapid change of temperature                       305
>>     Visual examination                                101
>>     Interfacial sealing                               324
>>     Measurement of insulation resistance              206      Immersed connectors
>>     Voltage proof test                                207      Immersed connectors
>>     Insert retention in housing (axial)               410
>>     Contact retention in insert                       409
>>     Mechanical strength of rear accessories           420
>>     Contact retention system effectiveness            426
>>     (removable contact walkout)
>>     Visual examination                                101
>>     Group 2
>>     Contact retention in insert                       409
>>     Retention of coding and attachment system in               See 8.2.
>>                                                        -
>>     insert
>>     Rapid change of temperature                       305
>> Group 3
>> # fin du fichier source (qui continue en fait avec d'autres essais du groupe 3, groupe 4, etc..
>>
>> # Début script awk
>> #!/bin/bash
>> awk '
>>    $1 == "Group" {printf("\\section{%s%d}\n", $1, $2); next}
>>    {for (i=1; i<=NF; i++)
>>        if ($i ~ /^[0-9][0-9][0-9]$/) {
>>            printf("\\subsection{"$1" \t "$2"} \\TestDetails{%d}\n", $i)
>>            break
>>        }}'
>> #Fin script awk
>>
>>
>>
>> #début fichier cible actuel
>> \section{Group0}
>> \subsection{Visual     examination} \TestDetails{101}
>> \subsection{Examination        of} \TestDetails{102}
>> \subsection{Contact    insertion} \TestDetails{412}
>> \subsection{Measurement        of} \TestDetails{206}
>> \subsection{Voltage    proof} \TestDetails{207}
>> \subsection{Contact    resistance} \TestDetails{201}
>> \subsection{Contact    resistance} \TestDetails{202}
>> \subsection{Mating     and} \TestDetails{408}
>> \subsection{Visual     examination} \TestDetails{101}
>> \section{Group1}
>> \subsection{Rapid      change} \TestDetails{305}
>> \subsection{Visual     examination} \TestDetails{101}
>> \subsection{Interfacial        sealing} \TestDetails{324}
>> \subsection{Measurement        of} \TestDetails{206}
>> \subsection{Voltage    proof} \TestDetails{207}
>> \subsection{Insert     retention} \TestDetails{410}
>> \subsection{Contact    retention} \TestDetails{409}
>> \subsection{Mechanical         strength} \TestDetails{420}
>> \subsection{Contact    retention} \TestDetails{426}
>> \subsection{Visual     examination} \TestDetails{101}
>> \section{Group2}
>> \subsection{Contact    retention} \TestDetails{409}
>> \subsection{Rapid      change} \TestDetails{305}
>> \subsection{Low        air} \TestDetails{311}
>> \subsection{Mechanical         endurance} \TestDetails{406}
>> \subsection{Mating     and} \TestDetails{408}
>> \subsection{Engagement         of} \TestDetails{216}
>> \subsection{Shock      402} \TestDetails{402}
>> \subsection{Sinusoidal         and} \TestDetails{403}
>> \subsection{Damp       heat} \TestDetails{304}
>> \subsection{Measurement        of} \TestDetails{206}
>> \subsection{Voltage    proof} \TestDetails{207}
>> \subsection{Visual     examination} \TestDetails{101}
>> \section{Group3}
>> \subsection{Electrical         overload} \TestDetails{210}
>> .......................................
>> #fin fichier cible actuel
>>
>>
>> #début fichier cible souhaité
>> \section{Group 0}
>> subsection{Visual      examination} \TestDetails{101}
>> \subsection{Examination        of dimensions and mass} \TestDetails{102}
>> \subsection{Contact    insertion and extraction forces} \TestDetails{412}
>> \subsection{Measurement        of insulation resistance} \TestDetails{206}
>> .......................etc
>>
>>
>>
>
>
> _______________________________________________
> archives :
> http://listes.patpro.net/list/sshfr.fr.html
> http://listes.patpro.net/mailman/listinfo/script_shell_fr
>

_______________________________________________
archives :
http://listes.patpro.net/list/sshfr.fr.html
http://listes.patpro.net/mailman/listinfo/script_shell_fr