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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  traitement ligne par ligne (trop hard pour moi)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

traitement ligne par ligne (trop hard pour moi)

n°1927864
tabasko
Posté le 30-09-2009 à 10:33:35  profilanswer
 

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 ! :)

mood
Publicité
Posté le 30-09-2009 à 10:33:35  profilanswer
 

n°1927866
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-09-2009 à 10:38:39  profilanswer
 

et il est où ton script ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°1927867
tabasko
Posté le 30-09-2009 à 10:46:44  profilanswer
 

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

n°1927871
pataluc
Posté le 30-09-2009 à 10:57:26  profilanswer
 

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
n°1927887
tabasko
Posté le 30-09-2009 à 11:22:17  profilanswer
 

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


n°1927898
pataluc
Posté le 30-09-2009 à 11:37:50  profilanswer
 

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] )

n°1927920
tabasko
Posté le 30-09-2009 à 13:22:40  profilanswer
 

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

n°1927927
pataluc
Posté le 30-09-2009 à 13:47:39  profilanswer
 

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

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

  traitement ligne par ligne (trop hard pour moi)

 

Sujets relatifs
Recherche d'une librairie pour du traitement d'image[Shell/Batch] "cat" à partir d'une ligne précise ...
[Résolu tout seul] [GTK] GTK Cell Renderer ne dessine qu'une ligne ?Modification du fichier text, en position XX de la ligne ZZ
Nouveau jeu en ligne multijoueur World of BombsExcel/VB - Valeur cellule de ligne + élevée dans tableau
Problème retour à la ligne données mysqlDebutant VB: un probleme de ligne a copier!!!
[JSF & RichFaces] Problème de click sur ligne d'un datatableFonction mail OK en ligne de commande php, KO par le Web
Plus de sujets relatifs à : traitement ligne par ligne (trop hard pour moi)


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