Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/03/2014, à 07:13

Link_Octree

[RESOLU] Appliquer un remplacement sed sur une seule colonne

Salut,

J'ai le fichier structuré suivant 1.txt:

27ème journée	09/03/2012 - 20:00	 ESTAC Troyes  	0 - 1	  Châteauroux
26ème journée	02/03/2012 - 19:00	 Châteauroux  	2 - 2	  Stade de Reims

Je compte intégrer plus tard ce fichier dans une page html, pour celà je cherche à mettre en valeur les matchs où les résultats sont 2-2:

sed -i 's#2 - 2#<strong>2 - 2</strong>#g' 1.txt

Problème, cette commande impacte un autre champs que je ne voudrais pas changer:

27ème journée    09/03/2012 - 20:00     ESTAC Troyes      0 - 1      Châteauroux

Je souhaites donc restreindre ma commande sed seulement sur la colonne souhaitée, j'ai tenté de combiner cat, cut et sed avec des pipes mais sans succés jusque là...

cat 1.txt | cut -f4 -s | sed -i 's#0 - 0#<strong><font color="red">0 - 0</font></strong>#g' 1.txt

Pourriez-vous me proposer une solution fonctionelle proche du code ci-dessous svp ? Un code plus propre/intéligent/rapide existe sûrement mais si je ne suis pas en mesure de le comprendre pour l'adapter à d'autres projets, ce n'est pas ce que je recherche.

Merci d'avance !

Dernière modification par Link_Octree (Le 23/03/2014, à 13:35)

Hors ligne

#2 Le 21/03/2014, à 08:44

Little Nooby

Re : [RESOLU] Appliquer un remplacement sed sur une seule colonne

Coucou,

À mon avis, tu te fatigues à réinventer la roue. Je te conseille de te tourner vers un format standard tel que le csv (http://fr.wikipedia.org/wiki/Comma-separated_values) qui te permettra de rendre ta base de donnée compréhensible pour pleins de logiciels (OpenOffice calc, matlab, Excel, ... pour ne citer que les plus connu). Évidemment, tu n'auras plus un fichier texte aussi joli mais si vraiment tu y tiens, tu pourras le générer très facilement à partir de ton fichier formaté en csv.

Si tu veux d'autres formats de base de donnée, tu peux chercher du sql (Sqlite par exemple, qui est très léger, géré nativement par android si je ne me trompe pas) ou encore en html ...

Pour répondre à ta question, tu pourrais adopter cette stratégie : cut les n premières colonnes correspondant à xxème journée    jj/mm/aaaa - hh:mm pour qu'elle ne pollue pas ta recherche, récupérer le numéro des lignes correspondantes à ta recherches avec grep -n et de là je te laisse te débrouiller :-D.

Dernière modification par Little Nooby (Le 21/03/2014, à 08:47)

Hors ligne

#3 Le 21/03/2014, à 08:46

credenhill

Re : [RESOLU] Appliquer un remplacement sed sur une seule colonne

hello
avec  un tab avant et après et le g est inutile

sed -i 's#\t2 - 2\t#<strong>2 - 2</strong>#' 1.txt

Hors ligne

#4 Le 21/03/2014, à 09:31

psyphi

Re : [RESOLU] Appliquer un remplacement sed sur une seule colonne

Je recommande la solution de credenhill car dans le cas d'un search and replace, sed est l'outil idéal.
Sache cependant que si tu dois faire des modifications plus spécifiques sur des colonnes, tu peux travailler avec awk.

awk -F'\t' '{if ($4=="2 - 2") print $1"\t"$2"\t"$3"\t<strong>"$4"</strong>\t"$5; else print $0}' 1.txt
27ème journée   09/03/2012 - 20:00       ESTAC Troyes   0 - 1     Châteauroux
26ème journée   02/03/2012 - 19:00       Châteauroux    <strong>2 - 2</strong>    Stade de Reims

Hors ligne

#5 Le 21/03/2014, à 10:00

ek0892

Re : [RESOLU] Appliquer un remplacement sed sur une seule colonne

sudo apt-get install rpl

rpl '2012 - 2' '2099 - 2'  1.txt ; 
rpl '2 - 2' '<strong>2 - 2</strong>'  1.txt ; 
rpl '2099 - 2' '2012 - 2'  1.txt

par contre si tu lances plusieurs fois tu risques d'avoir : <strong><strong>2 - 2</strong></strong> donc la solution consiste  à les retirer avant :

rpl  '<strong>2 - 2</strong>' '2 - 2' 1.txt ; 
rpl '2012 - 2' '2099 - 2'  1.txt ; 
rpl '2 - 2' '<strong>2 - 2</strong>'  1.txt ; 
rpl '2099 - 2' '2012 - 2'  1.txt

et voila smile

Dernière modification par ek0892 (Le 21/03/2014, à 10:14)

Hors ligne

#6 Le 23/03/2014, à 13:34

Link_Octree

Re : [RESOLU] Appliquer un remplacement sed sur une seule colonne

Merci à credenhill, je suis plutot parti sur ta solution, bien que celle de psyphi semble aussi intéressante, quand à rpl je connaissais pas du tout, merci ek0892 pour cette découverte smile

Hors ligne