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

Linux Discussion :

shell, selection de lignes


Sujet :

Linux

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut shell, selection de lignes
    bonjour,

    j'ai un petit probleme pour selectionner des lignes dans un fichier.

    Je veux selectionner toutes les lignes dont le nombre contenu dans le premier champ est supérieur ou égal a 3.

    Donc si le fichier contient par exemple :

    3 5
    4 5890
    2 abcd
    1 d
    12 fin

    on doit obtenir :

    3 5
    4 5890
    12 fin


    Je pense qu'avec grep il doit exister un moyen simple. Des idées ?

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    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 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ricg_84 Voir le message
    bonjour,

    j'ai un petit probleme pour selectionner des lignes dans un fichier.

    Je veux selectionner toutes les lignes dont le nombre contenu dans le premier champ est supérieur ou égal a 3.

    Donc si le fichier contient par exemple :

    3 5
    4 5890
    2 abcd
    1 d
    12 fin

    on doit obtenir :

    3 5
    4 5890
    12 fin


    Je pense qu'avec grep il doit exister un moyen simple. Des idées ?
    Désolé, grep est très basique. Tu peux peut-être essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "^[3456789] " fichier
    mais je n'y crois pas trop (mais moi et les regex ça fait trois).

    En revanche awk est beaucoup mieux taillé pour ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{if ($1 >= 3) print $0}' fichier

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Sve@r a raison : grep est très basique, et ne permettra ce genre de comparaisons directement.

    Si tu tiens absolument à l'utiliser, tu dois pouvoir faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    grep "^[3456789]|^[12][0-9] " fichier
    ce qui devrait te sortir les lignes commençant par 3 ç 9, ou les lignes dont le premier chiffre est 1 ou 2, suivi d'un nombre quelconque.

    Mais ca se fait mieux en awk, non ?

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Ou avec perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -ane 'print if $F[0] >= 3' fichier
    --
    Jedaï

  5. #5
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    allertant qu'à y être une autre solution encore
    avec sed :sed '/^[12][0-9]\|^[3-9]/!d' toto


    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
    tmp]# cat > toto
    3 gfdf
    4df
    1gfdg
    568 dfg
    3 dfgdg
    2 dfgd
    12 toto
    ^D
    tmp]# sed '/^[12][0-9]\|^[3-9]/!d' toto
    3 gfdf
    4df
    568 dfg
    3 dfgdg
    12 toto
    tmp]# rm toto
    rm: détruire fichier régulier `toto'? y
    tmp]#
    bienvenue sur http://99-bottles-of-beer.net/abc.html

Discussions similaires

  1. select dernière ligne...
    Par ludophil dans le forum Requêtes
    Réponses: 4
    Dernier message: 22/05/2009, 22h09
  2. [c#][VS 2005] Selection une ligne de datagridview
    Par Sodangbe dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/07/2006, 20h48
  3. balise select à une ligne (comboBox)
    Par guigui_rondat dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 05/02/2006, 00h54
  4. Pb de select : retrouver lignes identiques
    Par lamf dans le forum Requêtes
    Réponses: 11
    Dernier message: 07/01/2006, 21h53
  5. [C#] Sélection de lignes dans un DataGrid
    Par wayak3 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 12/07/2005, 11h17

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