Concaténer en shell

Résolu/Fermé
sebcah - 7 mai 2008 à 16:53
sebcah Messages postés 2 Date d'inscription lundi 12 mai 2008 Statut Membre Dernière intervention 12 mai 2008 - 12 mai 2008 à 11:27
Bonjour,

je souhaitais savoir comment faire pour transformer le fichier liste.txt suivant :

antony;034;
antony sud;034;
paris;075;
antony;034;
massy;091;
savigny;034;

en

antony / antony sud / savigny;034
paris;075;
massy;091;

Ainsi il faut :
-supprimer les doublons
-mettre à la suite les villes ayant même numéro en rajoutant le numéro à la fin :D

Merci du coup de main ;)

Seb
A voir également:

5 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
8 mai 2008 à 11:55
Salut,

Une autre solution à base de "sed" :
[tmpfs]$ cat data.txt
antony;034;
antony sud;034;
paris;075;
antony;034;
massy;091;
savigny;034;

[tmpfs]$ cat le_script.sh
#! /bin/bash

sort -u data.txt | sort -n -t";" +1  > fich
var=$(sort -u data.txt | sort -n -t";" +1 -u | cut -d";" -f2)

while read line; do sed -i '
/'"${line}"';$/{
:z
N
/'"${line}"';$/{
s/\n//
tz
}
s/;'"${line}"';\b/ \/ /g
}
' fich; done <<<"$var"

[tmpfs]$ ./le_script.sh
[tmpfs]$ cat fich
antony / antony sud / savigny;034;
paris;075;
massy;091;

[tmpfs]$
;-))
1
Grunt Messages postés 2773 Date d'inscription jeudi 17 janvier 2008 Statut Contributeur Dernière intervention 3 avril 2009 301
7 mai 2008 à 16:55
Excuse mon indiscrétion, mais comment ça se fait que tu ne postes pas avec l'OS sur lequel tu travailles?

Si c'est un exercice de cours, je pense que personne ne va t'aider, le but est que tu cherches toi-même ^^
0
Salut!

En fait je débute en shell... et je ne connais pas mon OS.

Ensuite je suis en stage, et il vaut mieux que je trouve vite, si je ne veux pas faire perdre de l'argent à ma boîte loooooool

;)
0
Grunt Messages postés 2773 Date d'inscription jeudi 17 janvier 2008 Statut Contributeur Dernière intervention 3 avril 2009 301
7 mai 2008 à 17:03
lol oki.
Je disais ça parce que y'a des tas de glandeurs qui ont un exo de cours, et plutôt que de passer 10 min à DL un Live CD et chercher eux-même, ils viennent faire faire leur exo sur CCM..

Ce qui n'est pas ton cas ^^

T'es pas obligé de programmer en shell donc, c'est langage libre tant que ça marche?
0
Nan c'est du Shell hélas et c'est tout ... :(
0
Grunt Messages postés 2773 Date d'inscription jeudi 17 janvier 2008 Statut Contributeur Dernière intervention 3 avril 2009 301 > sebcah
7 mai 2008 à 17:06
? Oui, mais si t'as (par exemple) le compilateur gcc sous la main, et que tu écris un prog en C pour résoudre ton pb, ce qui compte c'est que ça marche non?
Il me semble (bien que je ne le connaisse pas) que par exemple le perl pourrait résoudre ton pb plus facilement..
0
sebcah > Grunt Messages postés 2773 Date d'inscription jeudi 17 janvier 2008 Statut Contributeur Dernière intervention 3 avril 2009
7 mai 2008 à 17:11
Je sais bien que ce serait plus facile, mais si je programme en perl je me fais virer looool :P
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
8 mai 2008 à 06:23
Solution vite faite à améliorer, débuguer:
root@osiris ~/src/bash
$ cat data.txt
antony;034;
antony sud;034;
paris;075;
antony;034;
massy;091;
savigny;034;

root@osiris ~/src/bash
$ cat villes.sh
#!/bin/bash
sort  data.txt | uniq | awk 'BEGIN{FS=";"}
{gsub("^0", "" ,$2);
 numdep = $2 ;
 res[numdep] = res[numdep] "/" $1;
 }
 END {for (i=33; i<91; i++) {printf( "%03d %s\n",  i, res[i]);} } '

Bon amusement...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebcah Messages postés 2 Date d'inscription lundi 12 mai 2008 Statut Membre Dernière intervention 12 mai 2008
12 mai 2008 à 11:27
Merci beaucoup !

Ca marche bien :P
0