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 :

Supprimer les premières lignes d'un fichier (de façon variable) avec la commande sed


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 161
    Par défaut Supprimer les premières lignes d'un fichier (de façon variable) avec la commande sed
    Bonjour,
    Voici un shell de test :
    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
    #!/bin/bash
    ##########   Script : ztst.sh                                 ##########
    #                                                                      #
    # Script testant la commande sed                                       #
    #                                                                      #
    ########################################################################
    # 1/ Choisir le codage utf-8 : car le grep ne marche que avec utf8
    #
    #liam# iconv -f ISO-8859-1 -t UTF-8 ftst.csv -o ftst1.csv
    #
    cat ftst.csv                                                      #liam#
    cat ftst.csv > ftst1.csv                                          #liam#
    #  
    # 2/ Suppression des 9 premières lignes :
    #    ATTENTION : le 9 pourra varier lors des prochains passages !
    #
    VAR1=$(grep 'Date;' -n ftst1.csv) 
    VAR2=${VAR1:0:1}
     
    #sed '1,{$VAR2}d' ftst1.csv               #Ne peut pas marcher car '...'
     
    sed '1,9d' ftst1.csv > ftst2.csv
    #
    #Vérification                                                     #liam# 
    cat ftst2.csv                                                     #liam#
    Comment peut-on l'améliorer :
    1/ au cas il faille supprimer supprimer un autre nombre que 9 (lignes)
    2/ notamment au cas où il faille supprimer 10 lignes au lieu de neuf (9 = 1 caractère; 10 = 2 c)

    Voici l'exécution :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    $ ./ztst.sh
    ligne 01
    ligne 02
    Historique du 01/09/2001 au 03/11/2021
    ligne 04
    ligne 05
    ligne 06
    ligne 07
    ligne 08
    Date;Nom vernaculaire;Nom latin;Famille;
    02/11/2021;Abricotier;Prunus armeniaca;ROSACEÆ;
    26/10/2021;Cerisier des oiseaux;Prunus avium;ROSACEÆ;
    11/10/2021;Citronnier;Citrus limon;RUTACEÆ;
    08/10/2021;Cognassier;Cydonia oblonga;ROSACEÆ;
    07/10/2021;Framboisier;Rubus idaeus;ROSACEÆ;
    07/10/2021;Groseillier à grappes;Ribes rubrum;GROSSULARIACEÆ;
    05/10/2021;Achillée millefeuille;Achillea millefolium;ASTERACEÆ;
    01/10/2021;Alliaire;Alliaria petiolata;BRASSICACEÆ;
    30/09/2021;Aubépine à un style;Crataegus monogyna;ROSACEÆ;
    29/09/2021;Aulne glutineux;Alnus glutinosa;BETULACEÆ;
    21/09/2021;Bouleau pendant;Betula pendula;BETULACEÆ;
    10/09/2021;Cardamine hérissée;Cardamine hirsuta;BRASSICACEÆ;
    06/09/2021;Carotte;Daucus carota;APIACEÆ;
    02/09/2021;Chêne pédonculé;Quercus robur;FAGACEÆ;
     
    02/11/2021;Abricotier;Prunus armeniaca;ROSACEÆ;
    26/10/2021;Cerisier des oiseaux;Prunus avium;ROSACEÆ;
    11/10/2021;Citronnier;Citrus limon;RUTACEÆ;
    08/10/2021;Cognassier;Cydonia oblonga;ROSACEÆ;
    07/10/2021;Framboisier;Rubus idaeus;ROSACEÆ;
    07/10/2021;Groseillier à grappes;Ribes rubrum;GROSSULARIACEÆ;
    05/10/2021;Achillée millefeuille;Achillea millefolium;ASTERACEÆ;
    01/10/2021;Alliaire;Alliaria petiolata;BRASSICACEÆ;
    30/09/2021;Aubépine à un style;Crataegus monogyna;ROSACEÆ;
    29/09/2021;Aulne glutineux;Alnus glutinosa;BETULACEÆ;
    21/09/2021;Bouleau pendant;Betula pendula;BETULACEÆ;
    10/09/2021;Cardamine hérissée;Cardamine hirsuta;BRASSICACEÆ;
    06/09/2021;Carotte;Daucus carota;APIACEÆ;
    02/09/2021;Chêne pédonculé;Quercus robur;FAGACEÆ;n :

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

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

    #sed '1,{$VAR2}d' ftst1.csv #Ne peut pas marcher car '...'
    La réponse est dans la question. Si tu veux qu'une variable soit interprétée, change de protection.
    Ce n'est pas honteux d'écrire ceci :
    Si tu as peur des interprétations de caractères qui t'auraient échappé, tu peux écrire ceci :
    C'est un peu lourd mais efficace. On sort de la protection stricte pour rentrer dans la protection souple selon le besoin, et on retourne dans le script strict.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 657
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/^Date/,$p' fichier
    et c'est tout.

    pas besoin de grep, de variables...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 161
    Par défaut
    Merci Flodelarab pour ces explications.

    Ce qui était gênant dans mon . . .
    c'est qu'il ne marche que si on supprime les 1 à 9 premières lignes du fichiers.

    En effet, si 10 lignes étaient à supprimer, on en supprimerait (avec ce code) que la première (1 de 10)

    Merci N_BaH, effectivement c'est concis et évite le grep et le code ci-dessus défaillant lorsqu'on a plus de 9 lignes à supprimer.
    Cependant je ne cherche à obtenir que les lignes se trouvant que sous les libellé du titre.
    Faut-il faire alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sed -n '/^Date/,$p' fichier > fichier2
    sed '1,1d' fichier2 > fichier3
    ou

    peut on le faire en une seule commande sed ?

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 657
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/^Date/,${/^Date/d;p;}' fichier > fichier2
    et hop !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '1,/^Date/d' fichier
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer les premières lignes d'un fichier texte
    Par dino.adnane dans le forum Général Python
    Réponses: 12
    Dernier message: 10/05/2018, 18h31
  2. Supprimer les dernières lignes d'un fichier
    Par eleana dans le forum Shell et commandes GNU
    Réponses: 16
    Dernier message: 03/11/2017, 10h55
  3. Supprimer les premières lignes d'un fichier avec sed
    Par Tchupacabra dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 03/10/2013, 17h38
  4. [CSV] supprimer la première ligne d'un fichier
    Par kanabzh29 dans le forum Langage
    Réponses: 10
    Dernier message: 07/08/2008, 14h28
  5. Supprimer la première ligne d'un fichier texte
    Par n@n¤u dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 13/07/2006, 08h38

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