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 :

Fichier de données à traiter


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Décembre 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Fichier de données à traiter
    Salut Tous ,
    quelqu'un à une idées avec une ligne de commande avec bash enlever les bloques qui me sont inutiles :

    garder tout le bloque : ########## BBBB ########## et ########## DDDD ##########

    et supprimer le reste. >>> Merci pour les idées !!



    cat process.txt
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    #EXTSTART
    #EXTINF:-1 tvg-id="" tvg-name="########## AAAA ##########" 
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    #EXTINF:-1 tvg-id="" tvg-name="########## BBBB ##########" 
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    #EXTINF:-1 tvg-id="" tvg-name="########## CCCC ##########" 
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    #EXTINF:-1 tvg-id="" tvg-name="########## DDDD ##########" 
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    #EXTINF:-1 tvg-id="" tvg-name="########## EEEE ##########" 
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    #EXTINF:-1 tvg-id="" tvg-name="########## FFFF ##########" 
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla

  2. #2
    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 383
    Points
    19 383
    Par défaut
    Bonjour,

    d'abord, utiliser sed avec un intervalle,
    ensuite supprimer les lignes en trop.

    c'est pas super souple...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    Salut, voila une petite boucle bash qui devrait le faire
    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
    #Boucle traitant les lignes une à une, la variable contenant la ligne s'appelle... ligne :)
    while read ligne
    do
      #Recherche le terme tvg-name dans la ligne, ce terme ne doit etre contenu que dans tes lignes spécifiques
      if [[ "${ligne}" =~ "tvg-name"  ]]
      then
        #Si en plus de contenir tvg-name, il contient BBBB ou DDDD
        if [[ "${ligne}" =~ "BBBB" || "${ligne}" =~ "DDDD" ]]
        then
          #on active la variable renvoyant les infos
          RenvoyerTexte=true
        else
          #sinon on désactive la variable renvoyant les infos
          RenvoyerTexte=false
        fi
      fi
     
      #Si la variable est active (false par defaut) on renvoie les infos
      [[ ${RenvoyerTexte:-false} == true ]] && echo "${ligne}"
    done < process.txt
    Sous Kubuntu 20.04

  4. #4
    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 383
    Points
    19 383
    Par défaut
    est-ce qu'on reparle des guillemets entre [[, des variables entre accolades ?...

    il est préférable que les regex, entre [[, soient définies dans une variable, et utilisées sans guillemets. sans guillemets entre [[.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rgx='(BBBB|DDDD)'
    if [[ $ligne =~ $rgx ]]
    tu veux toujours utiliser des guillemets entre [[ ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    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
    Salut,
    ça bloque sur le bloc.
    Peut être avec un petit awk.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F '\n' -v RS='#EXTINF:-1 tvg-id="" tvg-name=' -v ORS="" 'NR==1{print}$1~/BBBB|DDDD/{print RS$0}' process.txt
    Cordialement.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    est-ce qu'on reparle des guillemets entre [[, des variables entre accolades ?
    Pas la peine :p
    Ce sont des habitudes que j'ai pris et le jour ou je mets qu'un [] ça posera pas de souci
    Et franchement ça prends pas plus de temps...

    il est préférable que les regex, entre [[, soient définies dans une variable, et utilisées sans guillemets.
    Ha ? Pourquoi ?
    Sous Kubuntu 20.04

  7. #7
    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 383
    Points
    19 383
    Par défaut
    « y en a qu'ont essayé »...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Pour le fun, en bash:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read ; do [[ "$REPLY" =~ DDDD|BBBB ]]  && X=1 || { [[ "$REPLY" =~ EXTINF ]] && X=0 ; } ; [[ $X == 1 ]] && echo "$REPLY" ; done <process.txt
    Cordialement.

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Points : 460
    Points
    460
    Par défaut
    « y en a qu'ont essayé »...
    Je suis sûr qu'ils ont eu des problèmes
    Sous Kubuntu 20.04

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Décembre 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Pour le fun, en bash:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read ; do [[ "$REPLY" =~ DDDD|BBBB ]]  && X=1 || { [[ "$REPLY" =~ EXTINF ]] && X=0 ; } ; [[ $X == 1 ]] && echo "$REPLY" ; done <process.txt
    Hooo Merci les gars. j'ai essayé et ca bloque sur le premier keyword dans la liste.
    dans mon cas.. il fait seulement BBBB

  11. #11
    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 383
    Points
    19 383
    Par défaut
    dans mon cas.. il fait seulement BBBB
    ???
    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
    $ while read ; do [[ "$REPLY" =~ DDDD|BBBB ]]  && X=1 || { [[ "$REPLY" =~ EXTINF ]] && X=0 ; } ; [[ $X == 1 ]] && echo "$REPLY" ; done <process.txt
    #EXTINF:-1 tvg-id="" tvg-name="########## BBBB ##########" 
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    #EXTINF:-1 tvg-id="" tvg-name="########## DDDD ##########" 
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    blabla
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    une variante avec awk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/^#\s*EXTINF/ {z=0} /### (BBBB|DDDD) ###/ {z=1} z {print}' fichier
    sinon avec sed j'ai ça, j'imagine qu'il doit y avoir plus court, à voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -rn '/### (BBBB|DDDD) ####/,/^#/{/^#/{/BBBB|DDDD/!d}; p}' fichier

  13. #13
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    En utilisant le même algo du awk de Bufferbob, en (gnu) sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -rn '/EXTINF/{x;z;x};/DDDD|BBBB/h;x;/D|B/{x;p}' fichier
    Cordialement.

Discussions similaires

  1. [Débutant] traiter plusieurs fichiers de données
    Par mgombert dans le forum MATLAB
    Réponses: 4
    Dernier message: 03/02/2011, 08h42
  2. Convertir un fichier de données quelconque en un fichier XML
    Par cari dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 06/06/2005, 18h11
  3. Fichier de données
    Par Philippe LE PONT dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 05/08/2004, 11h28
  4. [Fichier] Récupérer donnée d'un fichier
    Par johnlehardos dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 11/05/2004, 13h42
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

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