Commande Sed à la place de Awk

Résolu
Bonjour,

J'ai un programme shell qui traite des fichiers et utilisant une commande Awk.
Le problème est que la commande Awk est limitée en nombre de caractères (3000 je crois).
Donc j'aimerai substitué cette commande Awk par une commande Sed.

Voilà ce qu'il me faudrait :

Exemple de premières lignes de mon fichier :

SECURITY_NAME
PCT_PAR_QUOTED
MTY_TYP
AMT_ISSUED
PAR_AMT
FIRST_SETTLE_DT
FIRST_CPN_DT
PENULTIMATE_CPN_DT

Avec ma commande SED il faudrait que j'arrive au résultat suivant :

#date#12345#1#SECURITY_NAME#23#1
#date#12345#2#PCT_PAR_QUOTED#23#1
#date#12345#3#MTY_TYP#23#1
#date#12345#4#AMT_ISSUED#23#1
#date#12345#5#PAR_AMT#23#1
#date#12345#6#FIRST_SETTLE_DT#23#1
#date#12345#7#FIRST_CPN_DT#23#1
#date#12345#8#PENULTIMATE_CPN_DT#23#1

#date#12345# en début de ligne ne change jamais.
ensuite j'ai un numéro de ligne : 1# puis 2# puis 3# etc....
#23#1 en fin de ligne ne change jamais non plus.

Pourriez-vous m'aider à trouver la commande SED qui va bien pour traiter toutes les lignes de mon fichier afin d'y ajouter en début de ligne #date#12345#(numéro de ligne)# et #23#1 en fin de ligne.

Merci d'avance pour votre aide.
Configuration: Windows XP
Internet Explorer 6.0

4 réponses

  1. Modérateur
    tu n'as pas besoin d'utiliser eval pour ça

    il suffit de mettre la commande dans ton script shell
    par exemple
    #!/bin/sh
    
    perl -pi.orig -e 's/(.*)/#date#12345#$.#$1#23#1/' fic

    0
    1. Modérateur
      si tu tiens vraiement alors tu peux faire comme ça
      perl -ne 's/(.*)/#date#12345#$.#$1#23#1/' NomDuFichier.Origine > NomDuFichier.ApresTraitement
      --
      106485010510997108
      0
      1. Modérateur
        La modificaton est faite sur place, et le fichier original et sauvegarder avec l'extension .orig
        donc tu n'as pas besoin de rédirection
        0
        1. Désolé mais j'ai encore une question :

          comment utiliser ta commande perl dans un script shell?

          Car qd je l'exécute il me sort une erreur sur la "(" !

          ==> syntax error at line 144 : `(' unexpected

          Voici ma commande :

          *********************
          Commande_perl='echo "perl -pi -e 's/(.*)/${cl_date}${ACTIVITY_INSTANCE_ID}${cl_separateur}"$".${cl_separateur}"$"1${cl_separateur}${V_INTERFACE_ID}${cl_separateur}${cl_File_Number}' ${FIC_DATA} "'

          eval $Commande_perl
          *********************
          0
      2. Modérateur
        Salut,

        voici avec perl
        root@debian:~# cat fic
        SECURITY_NAME
        PCT_PAR_QUOTED
        MTY_TYP
        AMT_ISSUED
        PAR_AMT
        FIRST_SETTLE_DT
        FIRST_CPN_DT
        PENULTIMATE_CPN_DT
        root@debian:~# perl -pi.orig -e 's/(.*)/#date#12345#$.#$1#23#1/' fic
        root@debian:~# cat fic.orig
        SECURITY_NAME
        PCT_PAR_QUOTED
        MTY_TYP
        AMT_ISSUED
        PAR_AMT
        FIRST_SETTLE_DT
        FIRST_CPN_DT
        PENULTIMATE_CPN_DT
        root@debian:~# cat fic
        #date#12345#1#SECURITY_NAME #23#1
        #date#12345#2#PCT_PAR_QUOTED #23#1
        #date#12345#3#MTY_TYP #23#1
        #date#12345#4#AMT_ISSUED #23#1
        #date#12345#5#PAR_AMT #23#1
        #date#12345#6#FIRST_SETTLE_DT #23#1
        #date#12345#7#FIRST_CPN_DT #23#1
        #date#12345#8#PENULTIMATE_CPN_DT #23#1
        0
        1. Merci pour ta réponse mais cela ne marche pas sous UNIX.
          0
        2. Modérateur
          @Sir_rob1au moins tu as essayé?
          Perl se trouve sous tous les systèmes Unix ;-)
          0
        3. @lami20jAutant pour moi cela marche très bien.

          Je ne savais que l'on pouvait utiliser cette commande.

          Merci pour ton aide.
          0
        4. Modérateur
          @Sir_rob1en plus en Perl il n'y a pas des limites inutiles (c'est ça force)
          on dit aussi que que c'est sa faiblesse, mais c'est juste pour passer la balle sur le langage, au lieu de se concentrer sur la façon d'écrire le code ;-DDD
          0
        5. @lami20jautre question :

          comment rediriger le résultat de cette commande dans un autre fichier?

          Exemple : NomDuFichier.Origine > NomDuFichier.ApresTraitement
          0