Traiter les fichier CSV

sadia -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'ai un fichier file.csv qui contient deux colonnes et plusieurs ligne, et la première colonne contient des valeurs identiques et la 2 contient des valeurs déférentes du coup je voulais bien afficher la valeur de la première colonne puis les 5 valeur de la 2 colonne ainsi de suite par exemple en script shell
C;D
2039489;5374789
2039489;6857797
2039489;7459945
2039489;3682095
2039489;7457929
2039489;5436485
2039489;5469013
2039489;3456739
2039489;4744859
2039489;8698722
2039489;8960700
2039489;6575485

:::::::::::::::::::::::::::::
résultat
2039489=5374789+6857797+7459945+3682095+7457929
2039489=5436485+5469013+3456739+4744859+8698722
2039489=8960700+6575485 et ainsi de suite
merci par avance

3 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Il y a sans doute une solution plus simple et élégante avec
    awk
    , mais en attendant, celle-ci avec
    sed
    fait le job :

    $ sed -n 'h;{n;s/.*;//;H;n;s/.*;//;H;n;s/.*;//;H;n;s/.*;//;H;g;s/;/=/;s/\n/+/g;p}' f1
    2039489=5374789+6857797+7459945+3682095+7457929
    2039489=5436485+5469013+3456739+4744859+8698722

    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      En fait non, elle ne fait pas très bien le job, puisqu'il manque des données à la fin ;-(

      Heureusement, ZorroDubcek est arrivé ;-))
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    $ awk -F ";" 'NR>1 {printf $1 "=" $2; for (n=1; n<5; n++){if(getline)printf "+" $2}; print ""}' file.csv
    2039489=5374789+6857797+7459945+3682095+7457929
    2039489=5436485+5469013+3456739+4744859+8698722
    2039489=8960700+6575485
    0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    ou aussi
    $ awk -F ";" 'NR==2+n*5 {printf c $1 "=" $2; c=RS ; n++; next} NR>1 {printf "+" $2} END {print ""}' file.csv
    2039489=5374789+6857797+7459945+3682095+7457929
    2039489=5436485+5469013+3456739+4744859+8698722
    2039489=8960700+6575485
    0