SED ou awk ou nawk

rahon93 Messages postés 67 Statut Membre -  
rahon93 Messages postés 67 Statut Membre -
Bonjour,

Besoin d'un expert sed ou awk pour mettre tout sur la même ligne

CONDITION IN

PBIEXXD000 P_BIL_EDI START BIL EDI

CONDITION OUT

PBIEXXD030 P_BIL_EDI FINS8060 2626 PBIEXXD030
PEDIXXD021 P_BIL_EDI Transfert EDI FINB8050 BRDL to ECFRANCE PEDIXXD021

D'avance un grand merci.

Cdt.

31 réponses

  • 1
  • 2
Résumé de la discussion

Des échanges portent sur l'utilisation de sed ou awk pour mettre toutes les conditions sur une même ligne dans un fichier de règles, afin d'obtenir une sortie consolidée et lisible. Plusieurs propositions montrent l'emploi de sed -f avec des scripts comme new.sed ou new.new.sed sur des listes ALL_COND_IN_OUT.lst, avec des résultats séparés par des tabulations. Des échanges abordent aussi les limites selon les systèmes (AIX, Solaris, HP-UX, etc.) et l'absence de commande sed --version, conduisant à privilégier une vérification de version ou un ajustement du script. En parallèle, des échanges montrent que la sortie attendue peut être atteinte avec des scripts tabulés, mais nécessite encore des ajustements et des tests croisés entre entrée et sortie.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Y compris les lignes vides ?
    0
  2. rahon93 Messages postés 67 Statut Membre 2
     
    En supprimant les lignes vides.
    Mais je demande plus maintenant.
    J'aimerai afficher le résultat ci-dessous

    --- PBIBXXD025 ---

    CONDITION IN

    START DAILY PBIBXXD000
    PBILXXD010

    CONDITION OUT
    PBIBXXD030

    En forme de colonne. Colonne 1 NOM : PBIBXXD025
    2 CONDITION IN
    3 CONDITION OUT

    Est-ce possible ? J'ai un fichier contenant 10000 lignes auquels j'aimerai appliquer cette règle.

    Un grand merci d'avance.

    Cdt.Rahon
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Re-

      Est-ce que toutes les lignes devant faire l'objet d'un traitement commencent toujours par les mêmes motifs ? A savoir le nom par "---", les 2 autres champs par "CONDITION" ?

      Quel doit être le séparateur de champs ?
      0
  3. rahon93 Messages postés 67 Statut Membre 2
     
    Oui toujours dans ce format là. Mais il faut ajouter à chaque fin de ligne une barre dièsé.

    ########################################

    Ce dernier peut servir de séparateur ?

    Cdt, rahon
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      On peut voir un exemple concret de ce que tu veux réellement en sortie à partir de ton exemple ?

      En entrée tu as ça :
      -- PBIBXXD025 ---
      
      CONDITION IN
      
      START DAILY PBIBXXD000
      PBILXXD010
      
      CONDITION OUT
      PBIBXXD030
      
      -- PBIBXXD026 ---
      
      CONDITION IN
      
      START DAILY PBIBXXD000
      PBILXXD010
      
      CONDITION OUT
      PBIBXXD030
      

      Et en sortie tu veux quoi exactement ???
      0
  4. rahon93 Messages postés 67 Statut Membre 2
     
    Voici ce que je veux

    -- PBIBXXD025 --- CONDITION IN CONDITION OUT

    START DAILY PBIBXXD000 PBIBXXD030

    PBILXXD010
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. rahon93 Messages postés 67 Statut Membre 2
     
    Zut je veux 3 colonnes.

    JOB COND IN COND OUT
    - XXXXX - avec les cond in avec les cond out
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Un truc comme ça ?
      --- PBIBXXD025 --- CONDITION IN START DAILY ... CONDITION OUT PBIBXXD030
      --- PBIBXXD026 --- CONDITION IN START DAILY ... CONDITION OUT PBIBXXD031

      Et ces colonnes elles seront séparées par quoi ?
      0
  7. rahon93 Messages postés 67 Statut Membre 2
     
    Oui comme cela. Elles seront séparées par des tabulations....

    Cdt, Rahon
    0
  8. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    $ sed ':z;N;$!bz;s/\n/ /g;s/CON/\t&/g;s/ \(--- [A-Z]\)/\n\1/g;s/\s\+;/\t/g' plop
    --- PBIBXXD025 ---      CONDITION IN  START DAILY PBIBXXD000 PBILXXD010         CONDITION OUT PBIBXXD030
    --- PBIBXXD026 ---      CONDITION IN  START DAILY PBIBXXD001 PBILXXD010         CONDITION OUT PBIBXXD031
    --- PBIBXXD027 ---      CONDITION IN  START DAILY PBIBXXD002 PBILXXD010         CONDITION OUT PBIBXXD032
    
    $
    0
  9. rahon93 Messages postés 67 Statut Membre 2
     
    Ouaouuuuuu un sacré SED, je test et te dis ca....

    plop c'est le fichier ????

    Cdt, Rahon
    0
  10. rahon93 Messages postés 67 Statut Membre 2
     
    A mon avis je dois mal appliqué la commande.

    sed ':z;N;$!bz;s/\n/ /g;s/CON/\t&/g;s/ \(--- [A-Z]\)/\n\1/s/\s\+;/\t/g' ALL_COND_IN_OUT.lst (fichier regroupant toutes les données).
    <
    sed: The label :z;N;$!bz;s/\n/ /g;s/CON/\t&/g;s/ \(--- [A-Z]\)/\n\1/g;s/\s\+;/\t/g is greater than eight characters.
    0
  11. rahon93 Messages postés 67 Statut Membre 2
     
    Pour etre plus clair voila comment sont les données dans le fichiers .

    --- P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 ---

    CONDITION IN

    P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020

    CONDITION OUT

    P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999

    ########################################################################

    --- P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 ---

    CONDITION IN

    P_BIL_CFF_FOREIGN START CFF FOREIGN PBIFXXD000

    CONDITION OUT

    P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040

    ########################################################################

    --- P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 ---

    CONDITION IN

    P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010

    CONDITION OUT

    P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025

    ########################################################################
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Quel système ?
      Quelle version de sed ?
      0
  12. rahon93 Messages postés 67 Statut Membre 2
     
    System Unix
    Comment connaitre la version du sed ??
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      System Unix
      Oui mais encore ? AIX? Solaris ? HP-UX ? SCO ? etc


      Comment connaitre la version du sed ??
      Ça dépend du système ;-(
      Essaye "sed --version"
      0
  13. rahon93 Messages postés 67 Statut Membre 2
     
    AIX ecux0999 3 5 00C8324C4C00

    par contre le sed -version ou sed --version ne fonctionne pas.
    0
  14. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Bon c'est pas grave.

    Crées un fichier avec ce contenu :

    $ cat rahon.sed
    :z
    N
    $ !b z
    s/\n/ /g
    s/CON/\t&/g
    s/ \(--- [A-Z]\)/\n\1/g
    s/\s\+;/\t/g
    s/##*/\n&/g


    Et appelles-le comme suit :
    $ sed -f rahon.sed fichier

    0
  15. rahon93 Messages postés 67 Statut Membre 2
     
    Je teste et te fais un retour.
    0
  16. rahon93 Messages postés 67 Statut Membre 2
     
    C pas mal, mais ca me donne ca

    sed -f rahon.sed ALL_COND_IN_OUT.lst >> TOTO.txt

    cat TOTO.txt

    --- P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 --- tCONDITION IN P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 tCONDITION OUT P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 n########
    ################################################################ n--- P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 --- tCONDITION IN P_BIL_CFF_FOREIGN START CFF FOREIGN PBIFXXD000 tCO
    NDITION OUT P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040 n######################################################################## n--- P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 --- t
    CONDITION IN P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 tCONDITION OUT P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 n#################################################################
    ####### n--- P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026 --- tCONDITION IN P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 tCONDITION OUT P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999
    n######################################################################## n--- P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 --- tCONDITION IN P_BIL_CFF_FOREIGN START CFF FOREIGN PBIFXXD0
    00 tCONDITION OUT P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026 n######################################################################## n
    --- P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040 --- tCONDITION IN P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 tCONDITION OUT P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 n########
    ################################################################ n--- P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 --- tCONDITION IN P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 P_BIL
    _CFF_FOREIGN FINB0206 503 PBIFXXD026 P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040 tCONDITION OUT n######################################################################## n--- P_BIL_
    CFF_FOREIGN START CFF FOREIGN PBIFXXD000 --- tCONDITION IN tCONDITION OUT P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 n#################
    #######################################################

    Ca me donne pas cela en forme de colonne.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Essaie de modifier ce qui est en gras :

      :z
      N
      $ !b z
      s/\x0a/ /g
      s/CON/\x09&/g
      s/ \(--- [A-Z]\)/\x0a\1/g
      s/\s\+;/\x09/g
      s/##*/\x0a&/g
      0
  17. rahon93 Messages postés 67 Statut Membre 2
     
    Je reprendrais ce soir, en tout cas un grand merci à toi.
    Je te dirais si cela a fonctionne encore merci pour ton aide.

    Cdt, Rahon
    0
  18. rahon93 Messages postés 67 Statut Membre 2
     
    Bonjour,

    avec 3 jours de recul :), un peu de repos ca fais du bien.
    J'ai donc tester ce que tu m'as dis mais je ne vois pas ou tu veux aller....

    Quand j'execute ce que tu m'as donné sans rien modifier ca donne ca

    x0a########################################################################

    --- P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 ---

    x09CONDITION IN

    P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025
    P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026
    P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040

    x09CONDITION OUT

    x0a########################################################################

    Puis j'ai essayé de modifier les champs

    $ cat gras*
    :z
    N
    $ !b z
    s/\x0a/ /g
    s/CON/\IN/g
    s/ \(--- [A-Z]\)/\x0a\1/g
    s/\s\+;/\OUT/g
    s/##*/ /g

    Ca donne ca...

    --- P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 ---

    INDITION IN

    P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025
    P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026
    P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040

    INDITION OUT

    Je pense que je ne fais pas ce que tu aimerais que je teste...

    Cdt, Rahon
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Bon chez moi les 2 solutions marchent très bien et ne pouvant faire de tests sur un système AIX et sa version de "sed", je ne sais plus quoi te dire ;-(

      Essaye avec ça (à mettre dans un fichier comme précédemment) :

      #n
      :debut
      /^---/ {
          h
          :boucle
          n
          /^---/ !{
              H
              $ {
                  b change
              }
              b boucle
          }
          :change
          x
          s/\n\n*\(CON\)/;\1/g
          s/\n\n*/ /g
          s/##*/\n&/g	
          p
      }
      x
      b debut
      0
  19. rahon93 Messages postés 67 Statut Membre 2
     
    Oups,

    $ sed -f new.sed ALL_COND_IN_OUT.lst
    sed: Function s/##*/\n&/g cannot be parsed.
    $ cat new.sed
    #n
    :debut
    /^---/ {
    h
    :boucle
    n
    /^---/ !{
    H
    $ {
    b change
    }
    b boucle
    }
    :change
    x
    s/\n\n*\(CON\)/;\1/g
    s/\n\n*/ /g
    s/##*/\n&/g
    p
    }
    x
    b debut
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Protège les "#" :
      s/\#\#*/\n&/g 
      0
  20. rahon93 Messages postés 67 Statut Membre 2
     
    sed -f new.sed ALL_COND_IN_OUT.lst
    sed: Function s/\#/\#*/\n&/g cannot be parsed.
    $

    sed -f new.sed ALL_COND_IN_OUT.lst
    sed: Function s/\#\#*/\n&/g cannot be parsed.
    $

    Si près du but :)

    Cdt
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Supprime cette ligne on verra plus tard...
      0
  21. rahon93 Messages postés 67 Statut Membre 2
     
    OUAOUUUUUUU

    sed -f new.sed ALL_COND_IN_OUT.lst
    --- P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 ---;CONDITION IN P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 ;CONDITION OUT P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 ########################################################################
    --- P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 ---;CONDITION IN P_BIL_CFF_FOREIGN START CFF FOREIGN PBIFXXD000 ;CONDITION OUT P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040 ########################################################################
    --- P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 ---;CONDITION IN P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 ;CONDITION OUT P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 ########################################################################
    --- P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026 ---;CONDITION IN P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 ;CONDITION OUT P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 ########################################################################
    --- P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 ---;CONDITION IN P_BIL_CFF_FOREIGN START CFF FOREIGN PBIFXXD000 ;CONDITION OUT P_BIL_CFF_FOREIGN FINB0201 379 PBIFXXD020 P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026 ########################################################################
    --- P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040 ---;CONDITION IN P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 ;CONDITION OUT P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 ########################################################################
    --- P_BIL_CFF_FOREIGN FIN CFF FOREIGN PBIFXXD0999 ---;CONDITION IN P_BIL_CFF_FOREIGN FINS0202 427 PBIFXXD025 P_BIL_CFF_FOREIGN FINB0206 503 PBIFXXD026 P_BIL_CFF_FOREIGN FINB8010 890 PBIFXXD040 ;CONDITION OUT ########################################################################
    --- P_BIL_CFF_FOREIGN START CFF FOREIGN PBIFXXD000 ---;CONDITION IN;CONDITION OUT P_BIL_CFF_FOREIGN FINB8000 176 PBIFITD030 P_BIL_CFF_FOREIGN FINB2010 378 PBIFXXD010 ########################################################################

    C vraiment pas mal du tout....
    0
  • 1
  • 2