Re: perl/sed/tr

Top Page

Reply to this message
Author: Patrick Dupre
Date:  
To: Patrice Karatchentzeff
CC: guilde
Subject: Re: perl/sed/tr
Merci pour la bonne remarque.

En fait j'ai dit une betise.

 

C'est du awk et non du perl qui appel sed et tr

 

J'ai trouve une solution differente

 

system ("echo "line[nb_samp-1]" | tr -d '\r\n' | sed 's/[\\-]\\?[.0-9e]*[-+]\\?[0-9]*,[0-9]\\?.[0-9]*e\\?[-+]\\?[0-9]*$//' ")

 

===========================================================================
Patrick DUPRÉ | | email: pdupre@???
Laboratoire interdisciplinaire Carnot de Bourgogne
9 Avenue Alain Savary, BP 47870, 21078 DIJON Cedex FRANCE
Tel: +33 (0)380395988
===========================================================================

 
 

Sent: Sunday, July 21, 2019 at 10:44 AM
From: "Patrice Karatchentzeff" <patrice.karatchentzeff@???>
To: "Patrick Dupre" <pdupre@???>
Cc: guilde <guilde@???>
Subject: Re: perl/sed/tr



Salut

 

C'est bizarre de mettre du sed au milieu d'un script en perl... Perl le fait aussi bien tout seul... et tu perds beaucoup en perf en forkant vers le shell...

 

Pour répondre à ta question, tu peux inverser ta commande ( qui fait deux forks !)

 

my $sline = `head -n1 050618_C2H2_R2_0_25Pa_2.txt  | tr -d '\r\n'`

 

puis

 

system (etc... ), $line

 

Mais honnêtement, c'est quasi illisible ton script et il sera inmaintenable...

 

Surtout que tu peux tout faire sur un seul commande en perl (ou en plusieurs pour rendre lisible et maintenable...)

 

Un truc qui peut t'aider :

 

http://articles.mongueurs.net/magazines/linuxmag55.html

 

Bonne chance

 


Le dim. 21 juil. 2019 à 01:29, Patrick Dupre <pdupre@???> a écrit :

Bonjour,

Dans un programme perl je peux faire

 system ("sed 's/[\\-]\\?[.0-9e]*[-+]\\?[0-9]*,[0-9]\\?.[0-9]*e\\?[-+]\\?[0-9]*$//' <<< "line[nb_samp-1]" | tr -d '\n'")
sur un fichier linux (ou apres conversion d'un fichier dos2 unix)

Comme je veux eviter cette conversion, je fais :
 system ("sed 's/[\\-]\\?[.0-9e]*[-+]\\?[0-9]*,[0-9]\\?.[0-9]*e\\?[-+]\\?[0-9]*$//' <<< "line[nb_samp-1]" | tr -d '\r\n'")

Mais cela ne fonctonne pas car la fin de ligne n'est pas detectee par sed

J'ai bien verifie avec:

head -n1 050618_C2H2_R2_0_25Pa_2.txt |tr -d '\r\n'| od -a

me suprime bien le \t\n caracteres de fin de ligne du dos.
ou
encore
sed 's/[\-]\?[.0-9e]*[-+]\?[0-9]*,[0-9]\?.[0-9]*e\?[-+]\?[0-9]*$//' <<< `head -n1 050618_C2H2_R2_0_25Pa_2.txt  | tr -d '\r\n'`
fonctionne correctemnt.

Il faut donc que je fasse la meme chose depuis perl.
C'est-a-dire:
il faut forcer la commande
"line[nb_samp-1]" | tr -d '\r\n'
avant le sed
Mais je ne sais comment faire.

Merci d'avance

===========================================================================
 Patrick DUPRÉ                                 | | email: pdupre@???
 Laboratoire interdisciplinaire Carnot de Bourgogne
 9 Avenue Alain Savary, BP 47870, 21078 DIJON Cedex FRANCE
 Tel: +33 (0)380395988
===========================================================================

 



--




      |\      _,,,---,,_           Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:patrice.karatchentzeff@???
     |,4-  ) )-,_. ,\ (  `'-'    
    '---''(_/--'  `-'\_)