traitement ligne par ligne (trop hard pour moi)

traitement ligne par ligne (trop hard pour moi) - Shell/Batch - Programmation

Marsh Posté le 30-09-2009 à 10:33:35    

Bonjour !
 
J'ai un fichier qui a la structure suivante :
 
123 toto
456 toto
789 tutu
135 tutu
345 tata
723 tata
 
 
je souhaite que mon script puisse créer :  
 
un fichier toto.txt dont le contenu sera :
-t123 -t456
 
un fichier tutu.txt dont le contenu sera :
-t789 -t135
 
enfin un fichier tata.txt
-t345 -t723
 
Merci ! :)

Reply

Marsh Posté le 30-09-2009 à 10:33:35   

Reply

Marsh Posté le 30-09-2009 à 10:38:39    

et il est où ton script ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-09-2009 à 10:46:44    

nul par je ne sais pas faire cela ... j'imagine que les suggestions tourneront autour de awk et print ... mais c'est tout :-(

Reply

Marsh Posté le 30-09-2009 à 10:57:26    

avec un awk:

Code :
  1. awk '{t[$2] = t[$2]"-t"$1" ";} END {for (i in t) { print i": "t[i]}}' fichier_input
 

bon la ca balance pas dans un fichier mais le gros du boulot est fait.


Message édité par pataluc le 30-09-2009 à 10:57:44
Reply

Marsh Posté le 30-09-2009 à 11:22:17    

Pataluc ! encore merci.
 
J'ai fini de me dépatouiller ainsi :  
c'est pas très propre ce que je fais mais cela fonctionne ...
 
 
 

Citation :

awk '{t[$2] = t[$2]"-t"$1" ";} END {for (i in t) { print i": "t[i]}}' TEST | awk '{print$1}' | sed -e 's/://' > customer.list
 
for i in `cat customer.list`
do
awk '{t[$2] = t[$2]"-t"$1" ";} END {for (i in t) { print i": "t[i]}}' TEST | egrep $i | awk '{print$2" "$3}'> $i.txt
done


Reply

Marsh Posté le 30-09-2009 à 11:37:50    

tabasko a écrit :


c'est pas très propre ce que je fais mais cela fonctionne ...

c'est le moins qu'on puisse dire! ^^
 
passe plutôt par la fonction awk system() qui permet de lancer des commandes système:

Code :
  1. awk '{t[$2] = t[$2]"-t"$1" ";} END {for (i in t) { system("echo "t[i]" > "i)}}' input

parce que refaire un awk dans un for, algorithmiquement parlant c'est infame (sur un petit fichier ca se verra pas, mais sur un truc un poil conséquent  [:cerveau pouah] )

Reply

Marsh Posté le 30-09-2009 à 13:22:40    

il faudra que je regarde car je ne connaissais pas system ()
du coup ta commande est nickel mais je la pige pas :)

Reply

Marsh Posté le 30-09-2009 à 13:47:39    

system() envoie une commande au shell, comme si tu la tapais toi même. sauf qu'on y mets les variables du script awk (ici, t[i] et i) et roule Raoul. (cf man awk)


Message édité par pataluc le 30-09-2009 à 13:49:05
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed