[shell unix] utilisation de cat

Résolu/Fermé
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 - 29 juil. 2005 à 14:39
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 17 oct. 2007 à 10:38
Bonjour,

j'ai un fichier du type :

nom prenom telephone

avec une tabulation entre chaque colonne.

je souhaite faire une commande du type : pour chaque ligne, écrire "nom - prenom : telephone"

Or, quand je fais
for ligne in `cat fichier` do ... done
il considère que chaque élément du tableau est une ligne...

Comment faire ?
merci

5 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
29 juil. 2005 à 14:57
Salut,

Il te faudra un petit coup de pouce de awk:
http://lea-linux.org/dev/awk.html
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
29 juil. 2005 à 20:27
Salut,


Si tu as perl sur ton système tu peux essayer la commande
perl -p -i -e 's#(\w+)\t(\w+)\t(\d+)#$1 - $2 : $3#g' copie_de_ton_fichier


Toujours essaies sur une copie. Comme ça on ne risque pas de detruire le fichier original.

J'ai utilisé \d+ puisque je suppose que le format de telephone est de : 0123456789 (donc 10 chiffres).

Si autre format il faut le dire.
0
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
29 juil. 2005 à 23:09
Salut,

Tu peux aussi regarder du côté de "sed". Seul inconvénient tu devras passer par un fichier temporaire (ou supplémentaire). Remarque qu'avec "awk" aussi.

Donc en partant d'un fichier (fichier.txt) sous cette forme :
[jp@Mandrake tmpfs]$ cat fichier.txt
nom     prenom  0011223344
nom     prenom  0011223344
nom     prenom  0011223344
nom     prenom  0011223344
nom     prenom  0011223344
Voilà ce que ça donne avec "sed" (la commande "tee" n'est là que pour afficher la sortie à l'écran en même temps qu'elle est envoyée dans un autre fichier "change.txt") :
[jp@Mandrake tmpfs]$ sed -e 's/\t/-/' -e 's/\t/ : /' < fichier.txt | tee change.txt
nom-prenom : 0011223344
nom-prenom : 0011223344
nom-prenom : 0011223344
nom-prenom : 0011223344
nom-prenom : 0011223344
Et avec "awk" :
[jp@Mandrake tmpfs]$ cat fichier.txt | awk '{ print $1"-"$2" : "$3 }' | tee change.txt
nom-prenom : 0011223344
nom-prenom : 0011223344
nom-prenom : 0011223344
nom-prenom : 0011223344
nom-prenom : 0011223344
;-))
0
Bonjour,

int main(argc, **argv)
{

}
tu recupere le nom et le prenom avec des putstr
et tu fait un getnbr du numero de argv[3] comme ca tu le stoque dans un int au lieu que ce soir une chaine de char ^^
.

niveau debutant
0

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

Posez votre question
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
17 oct. 2007 à 10:38
Une piste avec awk :

johand@osiris ~
$ cat tel.txt

Dupont  Michel  012345
de Ghelderode   Michel  987654
Du Pont de Nemour       Arthur  666666

johand@osiris ~
$ awk 'BEGIN{FS="\t"}{printf "%s-%s:%s\n", $1,$2,$3 }' < tel.txt
-:
Dupont-Michel:012345
de Ghelderode-Michel:987654
Du Pont de Nemour-Arthur:666666

0