Commande Sed à la place de Awk
Résolu
Sir_rob1
-
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
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.
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
-
Salut,
voici avec perlroot@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
-
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-
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
*********************
-
-
si tu tiens vraiement alors tu peux faire comme ça
perl -ne 's/(.*)/#date#12345#$.#$1#23#1/' NomDuFichier.Origine > NomDuFichier.ApresTraitement
--
106485010510997108 -
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