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

Unix Discussion :

supression % de ligne au debut et à la fin dans un texte?


Sujet :

Unix

  1. #1
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut supression % de ligne au debut et à la fin dans un texte?
    Bonjour, je ne suis pas un spécialiste d'UNIX, je me débrouille mais là je sèche un peu.

    Voilà c'est pour des notions de règles qualité.
    Je récupère un fichier avec plusieurs colonnes et des valeurs statistique liée à la qualité, que je trie sur une certaine colonne, où je compte le nb lignes qui lui varie suivant le calcul.
    Et je voudrai en fonction de ce résultat enlever 5% du nombre de lignes trouvées en début de liste déjà rangée de manière croissante, et 5% du nombre de lignes trouvées en fin de liste

    Typiquement si je récupère un nb de ligne de 120 (nb que je récupère déjà dans un fichier avec wc), je veux enlever 5% de lignes au début et 5% de lignes à la fin, ici 5% de 120 = 6% x2 (pour début et fin), y a peut-être plus simple aussi que de passer par un fichier intermédiaire de résultat du nb lignes?
    Est-ce faisable en shell? (je suis sur mac)

    Merci de vos lumières
    Bonne journée
    Ian

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 258
    Points : 13 510
    Points
    13 510
    Par défaut
    Bonjour

    Voici un exemple. fichier.txt :
    267                                                                                                                                                                                                                                                                                                                            
    389                                                                                                                                                                                                                                                                                                                            
    638                                                                                                                                                                                                                                                                                                                            
    895                                                                                                                                                                                                                                                                                                                            
    1107                                                                                                                                                                                                                                                                                                                           
    1305                                                                                                                                                                                                                                                                                                                           
    2629                                                                                                                                                                                                                                                                                                                           
    2867                                                                                                                                                                                                                                                                                                                           
    2877                                                                                                                                                                                                                                                                                                                           
    3983                                                                                                                                                                                                                                                                                                                           
    4072                                                                                                                                                                                                                                                                                                                           
    5109                                                                                                                                                                                                                                                                                                                           
    5257                                                                                                                                                                                                                                                                                                                           
    5271                                                                                                                                                                                                                                                                                                                           
    5499                                                                                                                                                                                                                                                                                                                           
    6307                                                                                                                                                                                                                                                                                                                           
    6767                                                                                                                                                                                                                                                                                                                           
    7351                                                                                                                                                                                                                                                                                                                           
    7727                                                                                                                                                                                                                                                                                                                           
    8380                                                                                                                                                                                                                                                                                                                           
    (...)                                                                                                                                                                                                                                                                                                                          
    22810                                                                                                                                                                                                                                                                                                                          
    23494                                                                                                                                                                                                                                                                                                                          
    24060
    24792
    25293
    25876
    26822
    27075
    27423
    27953
    28072
    28414
    29079
    29856
    29983
    30008
    30232
    30266
    30630
    30838
    
    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
    $ awk '{total++;l[total]=$0;} END{aexclure=int(total*0.05+0.5);print "Nombre de lignes exclues au début :",aexclure;for (i=aexclure+1;i<=total-aexclure;i++) print l[i];}' fichier.txt 
    Nombre de lignes exclues au début : 3
    895
    1107
    1305
    2629
    2867
    2877
    3983
    4072
    5109
    5257
    5271
    5499
    6307
    6767
    7351
    7727
    8380
    8652
    8905
    9206
    9319
    9823
    10377
    10676
    11151
    11651
    12311
    12756
    12849
    13618
    13690
    13798
    20013
    20325
    20580
    20745
    20892
    22810
    23494
    24060
    24792
    25293
    25876
    26822
    27075
    27423
    27953
    28072
    28414
    29079
    29856
    29983
    30008
    30232
    fichier.txt fait 60 lignes. Il faut en éliminer 5%, soit 3. Le résultat enlève bien les 3 premières et les 3 dernières.

    Bonne chance
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 439
    Points
    19 439
    Par défaut
    en shell KISS!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ printf '%d\n' $(seq 120) >/tmp/nbLines
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ remL=$(( $(wc -l </tmp/nbLines) *5/100 ))
    $ tail -n +$remL /tmp/nbLines | head -n -$((remL-1))
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut Suppression % de ligne début et fin d'un texte
    Merci de vos réponses, que je vais mettre en œuvre
    Super

  5. #5
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut Suppression % de ligne début et fin d'un texte
    Bonjour, fonctionne à merveille, merci,
    Chapeau, pratiquant occasionnel, je n'en suis pas là en niveau!
    Top
    Merci

    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Voici un exemple. fichier.txt :
    267                                                                                                                                                                                                                                                                                                                            
    389                                                                                                                                                                                                                                                                                                                            
    638                                                                                                                                                                                                                                                                                                                            
    895                                                                                                                                                                                                                                                                                                                            
    1107                                                                                                                                                                                                                                                                                                                           
    1305                                                                                                                                                                                                                                                                                                                           
    2629                                                                                                                                                                                                                                                                                                                           
    2867                                                                                                                                                                                                                                                                                                                           
    2877                                                                                                                                                                                                                                                                                                                           
    3983                                                                                                                                                                                                                                                                                                                           
    4072                                                                                                                                                                                                                                                                                                                           
    5109                                                                                                                                                                                                                                                                                                                           
    5257                                                                                                                                                                                                                                                                                                                           
    5271                                                                                                                                                                                                                                                                                                                           
    5499                                                                                                                                                                                                                                                                                                                           
    6307                                                                                                                                                                                                                                                                                                                           
    6767                                                                                                                                                                                                                                                                                                                           
    7351                                                                                                                                                                                                                                                                                                                           
    7727                                                                                                                                                                                                                                                                                                                           
    8380                                                                                                                                                                                                                                                                                                                           
    (...)                                                                                                                                                                                                                                                                                                                          
    22810                                                                                                                                                                                                                                                                                                                          
    23494                                                                                                                                                                                                                                                                                                                          
    24060
    24792
    25293
    25876
    26822
    27075
    27423
    27953
    28072
    28414
    29079
    29856
    29983
    30008
    30232
    30266
    30630
    30838
    
    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
    $ awk '{total++;l[total]=$0;} END{aexclure=int(total*0.05+0.5);print "Nombre de lignes exclues au début :",aexclure;for (i=aexclure+1;i<=total-aexclure;i++) print l[i];}' fichier.txt 
    Nombre de lignes exclues au début : 3
    895
    1107
    1305
    2629
    2867
    2877
    3983
    4072
    5109
    5257
    5271
    5499
    6307
    6767
    7351
    7727
    8380
    8652
    8905
    9206
    9319
    9823
    10377
    10676
    11151
    11651
    12311
    12756
    12849
    13618
    13690
    13798
    20013
    20325
    20580
    20745
    20892
    22810
    23494
    24060
    24792
    25293
    25876
    26822
    27075
    27423
    27953
    28072
    28414
    29079
    29856
    29983
    30008
    30232
    fichier.txt fait 60 lignes. Il faut en éliminer 5%, soit 3. Le résultat enlève bien les 3 premières et les 3 dernières.

    Bonne chance

  6. #6
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2016
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    variante intéressante, différente du premier msg réponse, fonctionne très bien en sortant au préalable le nb lignes, cela permet de voir une autre manière de faire.
    L'autre réponse est plus adaptée à mes attentes, mais je note bien celle-ci aussi, pour un autre usage.

    Dans tous les cas je n'en suis pas là en niveau, Chapeau

    Merci bien



    Citation Envoyé par N_BaH Voir le message
    en shell KISS!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ printf '%d\n' $(seq 120) >/tmp/nbLines
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ remL=$(( $(wc -l </tmp/nbLines) *5/100 ))
    $ tail -n +$remL /tmp/nbLines | head -n -$((remL-1))

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 258
    Points : 13 510
    Points
    13 510
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    en shell KISS!
    C'est peut-être trop simple. On voulait enlever 5% et on a enlevé 2 lignes. Mais 2 lignes de 60 cela ne fait pas 5%.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 439
    Points
    19 439
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ remL=$(( $(wc - l </tmp/nbLines) *5/100))
    $ echo $remL
    6 # = 120*5/100 parce que printf '%d\n' $(seq 120) >/tmp/nbLines
    $ tail -n $((remL+1)) /tmp/nbLines | head -n -$remL
    j'ai vu que ça en enlevait 5, et j'étais content. mais 5 ce n'est pas 6 !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/01/2015, 08h56
  2. [DEBUTANT] compter les occurences dans un texte
    Par yooo38 dans le forum Général Python
    Réponses: 6
    Dernier message: 16/02/2010, 21h48
  3. [Debutant]Caractère de fin ligne
    Par smutmutant2003 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 12/07/2007, 16h49
  4. [Debutant] Lecture de fin de ligne StreamTokenizer
    Par Ubum dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 26/02/2006, 14h36
  5. [Debutant] TStrings et recherche dans le texte
    Par muquet dans le forum Langage
    Réponses: 3
    Dernier message: 11/01/2006, 16h02

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