Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
751 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [AWK | SED] Insert sioux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[AWK | SED] Insert sioux

n°847248
Predicator
Posté le 10-09-2004 à 18:44:33  profilanswer
 

Bonjour,
 
C'est mon premier post dans la section script, donc bonjour à ceux qui me connaissent pas :hello:  
 
Bon entrons dans le vif du sujet... Pour un portage UNIX -> Linux, j'ai besoin de :
 
Ajouter un espace à chaque fin de ligne
 
Avec la contrainte suivante :
 

Code :
  1. toto\
  2. tata


 
doit être considéré comme 2 lignes, on devrait donc récupérer :
 

Code :
  1. toto\_
  2. tata_


 
Où "_" représente " "
 
Pour les curieux, le vieux cpp disponible sur les vieux SUN n'intérprète pas le "\" en fin de ligne comme une indication que la ligne continue. Et ça nous arrange, car le "\" est un symbole du langage. Ne me dites pas "BOUH C'EST PAS BIEN", je le sais, mais ce langage existe depuis les années 80 :)
Et donc en portant le compilateur sous Linux, la ligne est fusionné avec la ligne du dessous, et le symbole "\" disparait :(  
 
Merci pour votre aide :hello:


Message édité par Predicator le 10-09-2004 à 18:45:39
mood
Publicité
Posté le 10-09-2004 à 18:44:33  profilanswer
 

n°847252
Taz
bisounours-codeur
Posté le 10-09-2004 à 18:48:18  profilanswer
 

je comprends pas, si tu fais un portage Solaris -> Linux, où est le problème ?

n°847259
Predicator
Posté le 10-09-2004 à 18:57:05  profilanswer
 

Le problème est que si tu fournis ce code à cpp :
 

Code :
  1. int toto \
  2. = 4;


 
en sortie, tu auras
 

Code :
  1. int toto = 4;


 
dans le cas du C/C++, ça ne pose pas de problème, dans le cas du langage que je dois compiler, ça pose problème, car "\" est un mot clé, et s'il disparait du fichier, bah ça ne marche plus !
 
cpp sous SUN4 ne mange pas les fin de ligne précédées de "\"...
 
Donc pour simplifier, ajouter " " à la fin de chaque ligne, même celles qui se terminent par "\" (toutes les lignes, car il y a un autre problème, mais pas besoin d'en parler)


Message édité par Predicator le 10-09-2004 à 18:58:21
n°847265
Taz
bisounours-codeur
Posté le 10-09-2004 à 19:10:12  profilanswer
 

cpp : C Pre Processor
 
il fait ce qu'il doit faire. si tu l'utilise pour autre chose, tu t'exposes à de sacré problème.

n°847269
Predicator
Posté le 10-09-2004 à 19:23:34  profilanswer
 

Taz a écrit :

cpp : C Pre Processor
 
il fait ce qu'il doit faire. si tu l'utilise pour autre chose, tu t'exposes à de sacré problème.


 
Tu es hors sujet là :o  
Mais je vois que tu es égal à toi même sur tous les forums dev, au moins je suis pas dépaysé :hello:  
cpp a changé de comportement entre 1988 et aujourd'hui, comment ils pouvaient prévoir que le \ deviendrait aussi important, hein ? :o  
 
Bon, ce n'est pas un sujet sur cpp, alors passons...
 
Quelqu'un a une idée pour générer ce fichier avec awk ou sed ? Je voudrais éviter PERL car ce n'est pas forcément dans les distrib de base :)


Message édité par Predicator le 10-09-2004 à 19:25:02
n°847308
Taz
bisounours-codeur
Posté le 10-09-2004 à 20:45:28  profilanswer
 

perl pas dans une distrib de base ?

n°847343
burgergold
5$? va chez l'diable!
Posté le 10-09-2004 à 21:01:33  profilanswer
 

Taz a écrit :

perl pas dans une distrib de base ?


 
+1
 
jai jamais rien vu qui avait pas perl
 
une LFS, une debian, AIX, solaris, ca l'a tjrs perl (et j'ai jamais vu en dessous de 5.05.02 => 5.5.2)

n°847348
Predicator
Posté le 10-09-2004 à 21:04:42  profilanswer
 

bon admettons... on peut donc ajouter PERL à la liste des solutions possible... :)

n°847356
burgergold
5$? va chez l'diable!
Posté le 10-09-2004 à 21:15:48  profilanswer
 


#!/usr/bin/perl
 
use strict;
 
my $file = '/tmp/file.cpp';
 
open(FENT, '< ' . $file);
my @lines = <FENT>;
close FENT:
 
open(FSOR, '> ' . $file);
foreach my $line (@lines) {
  if ($line =~ m/\n$/) {
    $line =~ s/\n/ \n/;
  }
  else {
    $line = $line . ' ';
  }
  print FSOR $line . ' ';
}
close FSOR;


 
pas testé mais devrait fonctionné
 
en gros tu veux seulement ajouter un espace après chaque ligne

n°847402
Predicator
Posté le 10-09-2004 à 22:25:50  profilanswer
 

C'est nickel ! Merci beaucoup à toi :jap:  
Je vais voir si je peux pas adapter à sed avec une syntaxe équivalente pour la substitution, et si je trouve pas, ça marchera avec Perl :hello:

mood
Publicité
Posté le 10-09-2004 à 22:25:50  profilanswer
 

n°847404
Taz
bisounours-codeur
Posté le 10-09-2004 à 22:27:47  profilanswer
 

en gros burger t'as craché la solution toute prête ... et toi tu parles toujours de sed ... mais vas-y, on l'attend toujours ton code sed ...

n°847407
burgergold
5$? va chez l'diable!
Posté le 10-09-2004 à 22:31:55  profilanswer
 

Taz a écrit :

en gros burger t'as craché la solution toute prête ... et toi tu parles toujours de sed ... mais vas-y, on l'attend toujours ton code sed ...


 
c'est son choix, on peut lui en vouloir de tenter le coup s'il préfère sed

n°847412
Taz
bisounours-codeur
Posté le 10-09-2004 à 22:38:11  profilanswer
 

non, moi je lui reproche de faire un sujet hors charte, toi tu t'ennuies à lui faire son truc, et il te répond qu'il préfère sed ... mais on a pas vu une seule ligne de sed alors ...

n°847415
Predicator
Posté le 10-09-2004 à 22:40:49  profilanswer
 

Taz a écrit :

en gros burger t'as craché la solution toute prête ... et toi tu parles toujours de sed ... mais vas-y, on l'attend toujours ton code sed ...


 
Je ne crache sur rien du tout :o  
J'ai remercié BurgerGold, mais effectivement, je préfèrerais avoir une ligne sed, même si c'est illisible, plutôt que d'avoir à appeler un script depuis un compilateur.
Et puis je ne pense pas avoir à recevoir de leçon de ta part... La moitié de tes posts dans la section dev ne servent à rien, tu détourne tous les posts, tu as été, comme souvent, d'une inutilité absolue ici... :o  
Mais on y peut rien, c'est la mentalité de beaucoup de développeurs ici. Heureusement qu'il reste des personnes compétentes ET pas imbues de leur personne... Merci encore BurgerGold :hello:

n°847417
Predicator
Posté le 10-09-2004 à 22:44:08  profilanswer
 

Taz a écrit :

non, moi je lui reproche de faire un sujet hors charte


 
En quoi il est hors charte mon sujet ? :heink:  
 
Et puis toi, arrête de penser à la place des autres, tu ne connais pas les contraintes, mais tu crois pourtant tout savoir :o  
Je déteste sed, je le trouve ignoble, je préfère Perl (du moins à l'époque lointaine où j'avais fait 2-3 trucs avec, ça devait être... Non je préfère pas y penser :lol: ), mais si je veux l'utiliser c'est qu'il y a une raison :o


Message édité par Predicator le 10-09-2004 à 22:44:18
n°847418
Taz
bisounours-codeur
Posté le 10-09-2004 à 22:46:40  profilanswer
 

il est hors charte dans le sens où tu demandes du code. on fait pas de résolution d'exercice ni de travail à l'oeil. si tu veux qu'on t'aide avec sed, on veut bien, mais faut que tu montres ou tu en es. sinon, RTFM

n°847428
Predicator
Posté le 10-09-2004 à 23:05:44  profilanswer
 

En utilisant l'expression régulière de BurgerGold, j'arrive à avoir un fichier de sortie qui a la même fin de ligne qu'en entrée. Le \ avant la fin de ligne est donc correctement géré, mais il n'ajoute pas d'espace...
 

Code :
  1. sed 's/\n/ \n/' inputfile > outputfile


 
Apparemment il ne prend pas en compte l'espace dans la seconde chaîne de substitution. En en mettant plusieurs, le résultat est le même :(

n°847429
Taz
bisounours-codeur
Posté le 10-09-2004 à 23:08:55  profilanswer
 

sed 's/$/ /g' | cat -A
a
b
c
a $
b $
c $

n°847432
Predicator
Posté le 10-09-2004 à 23:12:57  profilanswer
 

Taz a écrit :

sed 's/$/ /g'


 
ça marche, merci beaucoup :jap:  
il me manquait le global, par contre je ne comprends pas pourquoi ça ne marche pas ainsi :
 
sed 's/$\n/ \n/g'
 
EDIT : quand j'y réfléchis c'est con de mettre l'\n dedans des 2 côtés :lol:  
 
Merci à vous deux


Message édité par Predicator le 10-09-2004 à 23:13:39
n°847434
Taz
bisounours-codeur
Posté le 10-09-2004 à 23:16:03  profilanswer
 

parce que sed fonctionne en mode ligne et que la fin de ligne c'est $ et rien d'autre

n°847503
burgergold
5$? va chez l'diable!
Posté le 11-09-2004 à 05:56:18  profilanswer
 

Taz a écrit :

non, moi je lui reproche de faire un sujet hors charte, toi tu t'ennuies à lui faire son truc, et il te répond qu'il préfère sed ... mais on a pas vu une seule ligne de sed alors ...


 
si je l'ai fait c'est parce que ca me faisait plaisir  ;)

n°847976
matafan
Posté le 12-09-2004 à 03:05:50  profilanswer
 

J'ai peut-être loupé un truc, mais je comprend pas vraiment pourquoi t'as besoin de tant de lignes pour faire ça en perl. « perl -i -pe 's/$/ /' » ça suffit, non ?


Message édité par matafan le 12-09-2004 à 03:07:47
n°847984
burgergold
5$? va chez l'diable!
Posté le 12-09-2004 à 06:55:00  profilanswer
 

matafan a écrit :

J'ai peut-être loupé un truc, mais je comprend pas vraiment pourquoi t'as besoin de tant de lignes pour faire ça en perl. « perl -i -pe 's/$/ /' » ça suffit, non ?


 
possible, jai jamais vraiment utilisé perl en ligne de commande
 
moi je fais carrément du script, je fais la lecture, le remplacement lorsque ya un retour de ligne et lorsquien a pas, puis je réécris
 
si tu dis que ta méthode fonctionne, bin là c'est clair que se casser la tête avec sed ca sert à rien

n°848100
matafan
Posté le 12-09-2004 à 15:57:42  profilanswer
 

D'ailleurs c'est un aspect un peu méconnu de Perl mais ma ligne de commande marche aussi sur un fichier en faisant « perl -i -pe 's/$/ /' file_name ». En effet l'opérateur angle (<> ) fonctionne sur l'entrée par défaut, qui n'est pas forcément stdin. Si on donne un fichier en argument à Perl l'entrée par défaut est ce fichier.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [AWK | SED] Insert sioux

 

Sujets relatifs
AWK : faire un include[awk] problèmes caractères alphabet etranger
probleme awkProbleme awk & split
[ AWK ] Recherche de bloc ??Equivalent de "mysql_insert_id" pour MS SQLserver
[ACCESS] Probleme insert valeur Null ???[ACCESS/VB] pb avec insert et num auto
variable dans awkScript KSH et awk
Plus de sujets relatifs à : [AWK | SED] Insert sioux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR