Extraction sous linux

Résolu
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. Modérateur
    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
    ;-))
    1. Modérateur
      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

      1. Modérateur
        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ù ;-)
      2. Modérateur
        @jipicyRe,

        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
        
      3. Modérateur
        @lami20jBen 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 ;-))
      4. Modérateur
        @jipicySalut,

        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.

      5. Modérateur
        @lami20j
        $ 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...