[Bash] Additioner des lignes sous conditions

Additioner des lignes sous conditions [Bash] - Shell/Batch - Programmation

Marsh Posté le 13-06-2011 à 11:36:38    

Bonjour,
 
Je débute au niveau Shell et j'ai truc tout bête que j'aimerai mettre en place, tellement bête que je n'y arrive pas :pt1cable:  
J'ai un fichier qui est en colonne dans lequel je souhaite rechercher des motifs en double, en triple,... et dans ce cas additioner les valeurs de certaines colonnes.
Un exemple sera surement plus simple...
 
Fichier de départ: fichier.txt
 
Nicolas     5
Hubert      6
Anne        5
Nicolas     7
Nicolas     8
Anne        9
 
Fichier final souhaité : final.txt
 
Nicolas     20
Hubert      6
Anne        14
 
Je ne connais pas forcément la liste des motifs que je dois comparer au départ {Nicolas, Hubert, Anne} puisque cette liste est différente entre chaque fichier.
 
Voilà si quelqu'un pouvait me donner un petit coup de main, en m'expliquant comment il fait.
 
Merci d'avance

Reply

Marsh Posté le 13-06-2011 à 11:36:38   

Reply

Marsh Posté le 13-06-2011 à 14:42:02    

Alors en vrac, je dirais que tu auras besoin de la commande sort, d'une boucle while, la commande let et enfin des conditions.
Pour la boucle while, regarde cet exemple : http://www.commentcamarche.net/faq [...] -par-ligne

Code :
  1. #!/bin/bash
  2. sort "file"| while read name num
  3. do
  4.        ((i++))
  5.        if [ "$name" = "$old_name" ];then
  6.                old_num=$((old_num+num))
  7.        else
  8.                if [ -n "$old_name" ];then #si premiere ligne
  9.                        echo -e "$old_name\t$old_num"
  10.                fi
  11.                old_name=$name
  12.                old_num=$num
  13.        fi
  14.        [ $i -eq $(sort "file"|wc -l) ] && echo -e "$old_name\t$old_num" #si dernière ligne
  15. done


Message édité par roondar le 18-06-2011 à 12:36:10
Reply

Sujets relatifs:

Leave a Replay

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