Extraction sous linux

Résolu
Utilisateur anonyme -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'ai besoin d'aide en toute urgences SVP !!

voila, je travaille en ce moment sur un fichier d'appels d'offres. de ce fichier j'ai extrait tous les codes postaux donc j'ai un liste de code postaux de 2299 lignes . voici un extrait ci-aprés (j'ai pris quelques lignes seulement ):

95640
95700
95800
95801
95870
95880
97057
97100
97102
97120

et maintenant je veux garder que les numeros des départements donc les deux premier chiffres. au début je l'ai fait avec "cut -b -2" mais il me donne que les deux premiers chiffres mais le probleme c'est que le département outre-mer se décompose de 3 chiffres et non de 2 , donc comment je fait pour extraire les numeros de département à partir des codes postaux des villes , en sachant que tous les départements se décomposent de deux chiffres apart le departement outre-mer qui se decompose de 3 chiffres. j'ai pensé à la boucle "if" mais je ne sais pas comment ecrire le programme. SVP, j'ai besoin de votre aide. et merci
Configuration: Windows XP Internet Explorer 7.0

2 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Une solution :
    #! /bin/sh
    
    #set -xv
    
    for line in $(cat ton_fichier)
    do
    case "$line" in
    97???|98???)    echo "${line::3}"
                    ;;
    *)              echo  "${line::2}"
                    ;;
    esac
    done
    ;-))
    0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Je ne peux pas tester, mais pourqoui pas une simple regex avec l'option -o ?!
    grep -Eo '^(9[7|8][0-9]|[0-9][0-69])' fichier

    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Salut,

      C'est la 1ère chose à laquelle j'ai pensé, le problème c'est que grep fait une correspondance pour chaque motif trouvé sur la ligne, d'où un résultat du genre :
      970
      971
      00
      971
      02
      971
      20
      ;-((

      PS. Je te croyais parti je ne sais où ;-)
      0
    2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Re,

      Je ne comprends pas ton argument :-(

      Voici ce que j'obtiens comme résultat (bref c'est le même)
      lami20j@debian:~$ cat cp.txt
      95640
      95700
      95800
      95801
      95870
      95880
      97057
      97100
      97102
      97120
      lami20j@debian:~$ sh cp.sh
      95
      95
      95
      95
      95
      95
      970
      971
      971
      971
      lami20j@debian:~$ grep -Eo '^(9[7|8][0-9]|[0-9][0-69])' cp.txt
      95
      95
      95
      95
      95
      95
      970
      971
      971
      971
      lami20j@debian:~$ grep -Eo '^(9[7|8][0-9]|[0-9][0-69])' cp.txt  | wc -l
      10
      lami20j@debian:~$ sh cp.sh | wc -l
      10
      
      0
    3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
       
      Ben mon argument il tient à ce que j'obtiens ;-(((
      [tmpfs]$ cat toto
      32000
      93123
      94256
      94000
      95640
      95700
      95800
      95801
      95870
      95880
      97057
      97100
      97102
      97120
      
      [tmpfs]$ grep -Eo '^(9[7|8][0-9]|[0-9][0-69])' toto
      32
      00
      93
      12
      94
      25
      94
      00
      95
      64
      95
      70
      95
      80
      95
      80
      95
      95
      970
      971
      00
      971
      02
      971
      20
      [tmpfs]$  
      ;-\

      Si tu as une explication, je suis preneur ;-))
      0
    4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Salut,

      La version de grep ?!!!
      Regarde chez moi
      lami20j@debian:~$ cat cp.txt
      32000
      93123
      94256
      94000
      95640
      95700
      95800
      95801
      95870
      95880
      97057
      97100
      97102
      97120
      
      lami20j@debian:~$ grep -Eo '^(9[7|8][0-9]|[0-9][0-69])' cp.txt
      32
      93
      94
      94
      95
      95
      95
      95
      95
      95
      970
      971
      971
      971
      
      Voici la version de grep
      lami20j@debian:~$ grep --version
      GNU grep 2.5.3
      
      Copyright (C) 1988, 1992-2002, 2004, 2005  Free Software Foundation, Inc.
      This is free software; see the source for copying conditions.  There is NO
      warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

      0
    5. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
       
      $ grep --version
      grep (grep de GNU) 2.5.1
      C'est fort probable, faudrait voir les "features" entre la 2.5.1 et la 2.5.3 pour être certain...
      0