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 :

AWK et intervalle


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Par défaut AWK et intervalle
    Salut,

    Petit problème tout simple, mais je tourne en rond

    j'ai un fichier type csv avec des ;
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cat test.csv
    ;Motif;info1;info2;info3; phrase avec des retours chariot
    adfa
    asdfsdfa #
     
    dsafada
    sdfa?.
    ;Motif;info1;info2;info3; phrase ....
    ;Motif;info1;info2;info3; phrase ....
    ;Motif;info1;info2;info3; phrase ....
    Je considère qu'une "ligne" qui est comprise entre ";Motif" et le ;"Motif" de la ligne suivante.

    Je pensais faire tout simplement un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/^;Motif;/ , /^;Motif;/ test.csv'
    évidement ça ne marche pas, ça ne me rame que les lignes avec le motif, normal en somme
    je l'ai joué un peu trop facile

    donc si vous avez une solution je prend

    Merci beaucoup
    Alx

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

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

    que cherches-tu à obtenir ?

    le Record Separator ne peut-il être le point ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    le Record Separator ne peut-il être le point ?
    ok mon exemple était "foireu"
    Malheureusement il n'y a pas séparateur de fin de le ligne "identifiable"
    le point n'est pas forcément présent à la fin de chaque ligne.

    par contre je suis sur que le ";Motif;" apparait à chaque début de "ligne"

    ce que je veux en faite, c'est juste traiter mon fichier ligne "complète" à ligne "complète"

    J’espère que c'est plus clair

    Merci en tout cas pour ta réponse N_BaH

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 869
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par alx13 Voir le message
    ok mon exemple était "foireu"
    Malheureusement il n'y a pas séparateur de fin de le ligne "identifiable"
    le point n'est pas forcément présent à la fin de chaque ligne.

    par contre je suis sur que le ";Motif;" apparait à chaque début de "ligne"

    ce que je veux en faite, c'est juste traiter mon fichier ligne "complète" à ligne "complète"

    J’espère que c'est plus clair

    Merci en tout cas pour ta réponse N_BaH
    Salut
    Ok, pour toi une "ligne" est le texte commençant par ";Motif;" et allant jusqu'au ";Motif;" suivant sans se préoccuper des "\n" éventuels.

    Mais tu n'as pas dit ce que tu désirais faire de ta ligne...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Salut
    Ok, pour toi une "ligne" est le texte commençant par ";Motif;" et allant jusqu'au ";Motif;" suivant sans se préoccuper des "\n" éventuels.

    Mais tu n'as pas dit ce que tu désirais faire de ta ligne...
    Oui c'est exactement ça.

    Qu'est-ce que je fais avec, plein truc je decoupe la chaine dans des variables que je traite selon plein règle.

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    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
    $ cat test.csv
    ;Motif;info1;info2;info3; phrase avec des retours chariot
    adfa
    asdfsdfa #
     
    dsafada
    sdfa?.
    ;Motif;info1;info2;info3; phrase ....
    ;Motif;info1;info2;info3; phrase ....
    ;Motif;info1;info2;info3; phrase ....
     
    $ awk '
    BEGIN {
      RS=";Motif"
    }
    {
      print "debut" $0 "fin"
    }
    ' test.csv
    Résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    debutfin
    debut;info1;info2;info3; phrase avec des retours chariot
    adfa
    asdfsdfa #
     
    dsafada
    sdfa?.
    fin
    debut;info1;info2;info3; phrase ....
    fin
    debut;info1;info2;info3; phrase ....
    fin
    debut;info1;info2;info3; phrase ....fin

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Par défaut
    Je ne sais pas pourquoi j'étais persuadé que l'option -F ou RS devait contenir qu'un seul caractère....
    c'était évident en faite...
    Bon désolé

    Je comprends mieux l'interrogation de Sve@r
    Et Merci encore N_BaH, et Beginner.j

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Par défaut
    En fait j'ai toujours un problème.
    En y réfléchissant je vais reformuler mon besoin

    j'ai un fichier contenant des enregistrements.
    Chaque enregistrement commence par un motif défini, et finit par un retour chariot.
    Chaque enregistrement est composé de plusieurs colonnes qui sont séparées par des ";"

    Inconvénient, dans certaine colonne de type texte, il peut y avoir des retours chariots.

    Donc comment puis-je traiter enregistrement par enregistrement ?
    et non pas ligne par ligne car une "ligne" ne contient pas forcement un enregistrement entier à cause des retours chariot dans mes diverses colonnes

    Merci

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 869
    Billets dans le blog
    1
    Par défaut
    Ben c'est exactement l'exemple de Beginner.j. Il traite chaque enregistrement (contenu dans $0 du awk) via son print debut $0 fin. Lui c'est un print mais toi tu peux faire ce que tu veux. Mais faut le faire dans le awk...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Par défaut
    tout faire dans le awk mais ça va être une usine
    bon je vais alors reconstruire mon enregistrement dans la boucle

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 869
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par alx13 Voir le message
    tout faire dans le awk mais ça va être une usine
    C'était un petit peu ma toute première question quand je te demandais que veux-tu faire avec ton "record". Parce que selon le traitement les solutions diffèrent. Mais quoi qu'il en soit, le shell n'a pas de fonction de base permettant de récupérer d'un coup un "record" tel que tu l'entends. Eventuellement avec Python qui est plus puissant question manipulation ou perl qui est fait pour traiter du texte...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 694
    Par défaut
    tout faire dans le awk mais ça va être une usine
    ça le sera beaucoup moins qu'en shell !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Les retours chariots sont à garder?

    Je te conseille de regarder ce post que j'avais fait vu qu'il est assez semblable à ton problème:
    http://www.developpez.net/forums/d13...tours-chariot/

    Sinon un code pas optimisé du tout ci-dessous pour te donner des idées.

    Le awk supprime les retours chariot et sed remplace ";Motif" par un retour chariot. On peut remplacer le awk par un sed (mais je ne maitrise pas le sed et les retour chariots)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    awk '
    BEGIN {
      BINMODE=1
      RS="\n"
      ORS="toto"
    }
    {
      print $0
    }
    ' test.csv | sed "s/;Motif/\n/g" > test-tmp.csv
    Résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ;info1;info2;info3; phrase avec des retours chariottotoadfatotoasdfsdfa #toto totodsafadatotosdfa?.toto
    ;info1;info2;info3; phrase ....toto
    ;info1;info2;info3; phrase ....toto
    ;info1;info2;info3; phrase ....toto
    Tu fais ta manipulation et après tu remplaces les toto par des retour chariot si tu veux les conserver.
    Dernière modification par al1_24 ; 02/03/2013 à 15h46. Motif: Grammaire, orthographe

Discussions similaires

  1. insérer un retour chariot à intervalle régulier en bash ou awk
    Par mamax49 dans le forum Langages de programmation
    Réponses: 0
    Dernier message: 11/09/2014, 10h35
  2. Afficher un intervalle de champs avec awk
    Par sedawk dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 30/11/2011, 11h19
  3. Tableau en paramètre - Shell et Awk
    Par gc243 dans le forum Linux
    Réponses: 7
    Dernier message: 10/12/2003, 14h32
  4. Réponses: 7
    Dernier message: 02/06/2003, 09h38
  5. [langage] awk et sed dans script perl
    Par scoti dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2003, 19h26

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