Rechercher : dans
Par :

Commande Sed à la place de Awk

Dernière réponse le 2 avr 2008 à 12:31:00 Sir_rob1, le 2 avr 2008 à 10:59:20 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Commande Sed à la place de Awk » dans :
Sed - Introduction à SED - Part III VoirSED - The Stream EDitor - Part III Ce document est une introduction à la pratique et à l'utilisation de l'éditeur de flux "SED", qui essaie de couvrir certaines fonctionnalités assez méconnues, pour ne pas dire "quasi inconnues", qui font de "SED"...
Sed - Insertion de texte VoirInsérer du texte dans un fichier Introduction Syntaxe Ajout de texte Insérer une ligne avec "i" Ajouter une ligne avec "a" Échanger une ligne avec "c" Introduction Il est parfois utile de pouvoir insérer du texte en en-tête d'un ou...
Sed - Supprimer une ou plusieurs lignes d'un fichier VoirSupprimer une (ou plusieurs) ligne(s) d'un fichier Syntaxe sed '{[/]||[/]}d' sed '{[/][,][/]d' /.../ = délimiteurs n = le numéro de ligne chaîne = la chaîne contenue dans la...
Mise en place de Samba sous Linux VoirIntroduction Un des principaux intérêts des réseaux est la possibilité de partager des fichiers. Il existe des protocoles (notamment le FTP, File Transfert Protocol) permettant de transférer des fichiers à l'aide de commandes à travers un réseau...

1

lami20j, le 2 avr 2008 à 11:05:53

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
106485010510997108

Répondre à lami20j

2

Sir_rob1, le 2 avr 2008 à 11:11:16

Merci pour ta réponse mais cela ne marche pas sous UNIX.

Répondre à Sir_rob1

3

lami20j, le 2 avr 2008 à 11:12:21

Au moins tu as essayé?
Perl se trouve sous tous les systèmes Unix ;-) 106485010510997108

Répondre à lami20j

4

Sir_rob1, le 2 avr 2008 à 11:17:10

Autant pour moi cela marche très bien.

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

Merci pour ton aide.

Répondre à Sir_rob1

5

lami20j, le 2 avr 2008 à 11:20:45

En 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
106485010510997108

Répondre à lami20j

6

Sir_rob1, le 2 avr 2008 à 11:49:27

Autre question :

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

Exemple : NomDuFichier.Origine > NomDuFichier.ApresTraitement

Répondre à Sir_rob1

7

lami20j, le 2 avr 2008 à 12:04:33

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 106485010510997108

Répondre à lami20j

9

Sir_rob1, le 2 avr 2008 à 12:20:02

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
*********************

Répondre à Sir_rob1

8

lami20j, le 2 avr 2008 à 12:17:00

Si tu tiens vraiement alors tu peux faire comme ça

perl -ne 's/(.*)/#date#12345#$.#$1#23#1/' NomDuFichier.Origine > NomDuFichier.ApresTraitement
--
106485010510997108

Répondre à lami20j

10

 lami20j, le 2 avr 2008 à 12:31:00

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

106485010510997108

Répondre à lami20j