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 663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 663
    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 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 663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 663
    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 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 663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 663
    Par défaut
    « y en a qu'ont essayé »...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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