IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

[awk] Suppression de la dernière ligne d'un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Par défaut [awk] Suppression de la dernière ligne d'un fichier
    Bonjour,

    Mon but est de supprimer la dernière ligne de mon fichier via un script AWK

    Fichier initial qui comprend une ligne blanche à la fin: fichier.csv

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ cat fichier.csv
    "DUPONT","HENRI","PARIS","FR","12-08-1950","123456789","FR12345","GU","120","EUR","CARTE","11"
    "DUPONT","HENRI","PARIS","FR","12-08-1950","123456789","FR12345","GU","120","EUR","CARTE","11"
    "MARTIN","LUCIEN","PARIS","FR","20-02-2000","412566655","FR43333","GA","420","EUR","CHEQUE","1"
    "LECOMTE","CATHERINE","PARIS","FR","21-08-1989","842216654","FR8523","GC","25000","EUR","CARTE","15"
    "MARTIN","JACQUES","PARIS","FR","21-08-1902","9876543210","FR456788","GA","3600","EUR","CHEQUE","58"
    "MARTIN","JACQUES","PARIS","FR","21-08-1902","9876543210","FR456788","GC","25000","EUR","CARTE","120"
     
    $


    Mon but est d'avoir le fichier suivant (fichier résultat.csv)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1;1;MARTIN;LUCIEN;PARIS;20/FEB/2000;412566655;FR43333;GA;420;EUR;CH;
    2;178;MARTIN;JACQUES;PARIS;21/AUG/1902;9876543210;FR456788;GA;3600;EUR;CH;GC;25000;EUR;CB;
    1;15;LECOMTE;CATHERINE;PARIS;21/AUG/1989;842216654;FR8523;GC;25000;EUR;CB;
    2;22;DUPONT;HENRI;PARIS;12/AUG/1950;123456789;FR12345;GU;120;EUR;CB;GU;120;EUR;CB;

    Pour supprimer une ligne blanche, on peut utiliser awk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    awk 'NF > 0' filename
    awk NF file
    awk '!/^$/' file

    Je ne parviens pas à l'intégrer dans mon script awk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #!/usr/bin/awk -f
     
    BEGIN {
       FS="\",\""
       b=";"
    }
    {  
       gsub(/"/,"",$1)
       gsub(/-01-/,"/JAN/",$5)
       gsub(/-02-/,"/FEB/",$5)
       gsub(/-03-/,"/MAR/",$5)
       gsub(/-04-/,"/APR/",$5)
       gsub(/-05-/,"/MAY/",$5)
       gsub(/-06-/,"/JUN/",$5)
       gsub(/-07-/,"/JUL/",$5)
       gsub(/-08-/,"/AUG/",$5)
       gsub(/-09-/,"/SEP/",$5)
       gsub(/-10-/,"/OCT/",$5)
       gsub(/-11-/,"/NOV/",$5)
       gsub(/-12-/,"/DEC/",$5)
       $11=$11=="CARTE"?"CB":"CH"
       a=$1b$2b$3b$5b$6b$7
       ++c[a]
       e[a]=e[a]$8b$9b$10b$11b
       g[a]=g[a]+$12  
    }
    END {
       for(i in c)print c[i]b g[i]b i b e[i]
    }

    J'ai donc cela en résultat final
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    1;0; ;;;;;;;;;CH;
    1;1;MARTIN;LUCIEN;PARIS;20/FEB/2000;412566655;FR43333;GA;420;EUR;CH;
    2;178;MARTIN;JACQUES;PARIS;21/AUG/1902;9876543210;FR456788;GA;3600;EUR;CH;GC;25000;EUR;CB;
    1;15;LECOMTE;CATHERINE;PARIS;21/AUG/1989;842216654;FR8523;GC;25000;EUR;CB;
    2;22;DUPONT;HENRI;PARIS;12/AUG/1950;123456789;FR12345;GU;120;EUR;CB;GU;120;EUR;CB;

    Quelqu'un aurait-il aussi une meilleure idée pour le changement de date?

    Merci d'avance

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 308
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    (...)
    BEGIN{
    (...)
    }
     
    !NF{next;}
     
    {
    (...)
    Pour la date, tu peux aussi faire un tableau. Voire un fichier annexe.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par man awk
    An awk program is a sequence of patterns and corresponding actions.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Par défaut
    Bonjour,
    J'ai toujours la ligne "parasite" dans le fichier résultat.csv
    1;0; ;;;;;;;;;CH;

  5. #5
    Invité
    Invité(e)
    Par défaut
    quelles modifications as-tu effectuées sur ton script ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #!/usr/bin/awk -f
     
    BEGIN {
       FS="\",\""
       b=";"
    }
    !NF{next;}
    {  
       gsub(/"/,"",$1)
       gsub(/-01-/,"/JAN/",$5)
       gsub(/-02-/,"/FEB/",$5)
       gsub(/-03-/,"/MAR/",$5)
       gsub(/-04-/,"/APR/",$5)
       gsub(/-05-/,"/MAY/",$5)
       gsub(/-06-/,"/JUN/",$5)
       gsub(/-07-/,"/JUL/",$5)
       gsub(/-08-/,"/AUG/",$5)
       gsub(/-09-/,"/SEP/",$5)
       gsub(/-10-/,"/OCT/",$5)
       gsub(/-11-/,"/NOV/",$5)
       gsub(/-12-/,"/DEC/",$5)
       $11=$11=="CARTE"?"CB":"CH"
       a=$1b$2b$3b$5b$6b$7
       ++c[a]
       e[a]=e[a]$8b$9b$10b$11b
       g[a]=g[a]+$12  
    }
    END {
       for(i in c)print c[i]b g[i]b i b e[i]
    }

Discussions similaires

  1. Suppression de la dernière ligne d'un fichier XML
    Par Surinox dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 01/02/2017, 16h15
  2. [Batch] Suppression de la dernière ligne d'un fichier.
    Par cycy75 dans le forum Scripts/Batch
    Réponses: 14
    Dernier message: 02/05/2016, 15h52
  3. Réponses: 1
    Dernier message: 28/01/2010, 20h23
  4. Suppression de la dernière ligne d'une sélection
    Par Damss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/03/2009, 10h31
  5. suppression de la dernière ligne vide d'un fichier text en VB6
    Par zcoul dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 23/07/2007, 19h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo