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

  1. #1
    Membre régulier Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    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 : 160
    Points : 80
    Points
    80
    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 éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    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.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 382
    Points
    19 382
    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 régulier Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    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 : 160
    Points : 80
    Points
    80
    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 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 382
    Points
    19 382
    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 confirmé
    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
    Points : 539
    Points
    539
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed '1,/^Date/d' fichier
    Cordialement.

  7. #7
    Membre régulier Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    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 : 160
    Points : 80
    Points
    80
    Par défaut
    Merci à vous deux, N_BaH et ctac_.

    Vous êtes trop fort !

    Moi qui n'ai aucun livre sur le shell, et qui ai du mal à bien comprendre l'anglais du man, quel livre du shell (bash) me conseilleriez-vous ?

  8. #8
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    Bonjour,

    Un régal auquel dans lequel je me plonge régulièrement en gros dilettante, alors que c'est de la bombe en matière d'introduction :

    "Introduction aux scripts shell" (O'Reilly - traduit par Eric Jacoboni)

    NB: ici aussi il doit y avoir de bon tutoriels à lire et à relire.

  9. #9
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    ps: à bookmarker aussi (vient de m'éclairer sur un truc) : http://aral.iut-rodez.fr/fr/sanchis/...ash/index.html

+ 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