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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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 706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 706
    Par défaut
    Bonjour,

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

    c'est pas super souple...

  3. #3
    Membre chevronné
    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
    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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 706
    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 [[ ?

  5. #5
    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
    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 chevronné
    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
    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 ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 706
    Par défaut
    « y en a qu'ont essayé »...

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, 09h42
  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, 19h11
  3. Fichier de données
    Par Philippe LE PONT dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 05/08/2004, 12h28
  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, 14h42
  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, 23h37

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