Extraction sous linux

Résolu/Fermé
Utilisateur anonyme - 2 juil. 2009 à 11:18
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 2 juil. 2009 à 20:26
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
A voir également:

2 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
2 juil. 2009 à 12:03
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
2 juil. 2009 à 13:51
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
2 juil. 2009 à 14:29
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
2 juil. 2009 à 19:19
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
2 juil. 2009 à 19:23
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
2 juil. 2009 à 19:33
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
2 juil. 2009 à 20:04
$ 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