Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 30/01/2022, à 11:42

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Bonjour Watael,

Dans ton poste #9 a écrit :

non, pas ls | grep.
plutôt un tableau :

fichiersINSEE=( "$dossier"/deces-[0-9][0-9][0-9][0-9].txt )
# et on teste son nombre d'éléments
(( ${#fichiersINSEE[*]} )) || errQuit "pas de fichiers INSEE"

J'ai fais de multiple test et le code de retour de

(( ${#fichiersINSEE[*]} ))

est toujours "0" alors la suite de la ligne ne s’exécute jamais sad
Alors que le retour d'un

echo ${#fichiersINSEE[*]}

est bien de 52 dans le bon dossier, il est de "1" dans d'autres dossiers qui ne contiennent pas ce type de fichier !...
Où est le problème ? hmm

Dernière modification par Frankkunst (Le 30/01/2022, à 11:43)


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#27 Le 30/01/2022, à 12:49

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

J'ai refait différents contrôles
Et en fin de compte lorsque le dossier est vide, le tableau prend le modèle pour initialiser l'élément indice 0
Voilà en utilisant ce script :

#!/bin/bash
fichiersINSEE=( /home/frank/DOSStest/deces-[0-9][0-9][0-9][0-9].txt )
echo ${#fichiersINSEE[*]} "est le retour de \"echo \${#fichiersINSEE[*]}\""
echo ${!fichiersINSEE[*]} "est le retour de \"echo \${!fichiersINSEE[*]}\""
echo ${fichiersINSEE[0]} "est le retour de \"echo \${fichiersINSEE[0]}\""
(( ${#fichiersINSEE[*]} )) ; echo $? "est le code de retour de \"(( \${#fichiersINSEE[*]} ))\""
exit

dans le dossier vide on a :

frank@ordiport:~$ testPresent
1 est le retour de "echo ${#fichiersINSEE[*]}"
0 est le retour de "echo ${!fichiersINSEE[*]}"
/home/frank/DOSStest/deces-[0-9][0-9][0-9][0-9].txt est le retour de "echo ${fichiersINSEE[0]}"
0 est le code de retour de "(( ${#fichiersINSEE[*]} ))"
frank@ordiport:~$

et en y mettant deux fichiers on obtient :

frank@ordiport:~$ testPresent
2 est le retour de "echo ${#fichiersINSEE[*]}"
0 1 est le retour de "echo ${!fichiersINSEE[*]}"
/home/frank/DOSStest/deces-2019.txt est le retour de "echo ${fichiersINSEE[0]}"
0 est le code de retour de "(( ${#fichiersINSEE[*]} ))"
frank@ordiport:~$

donc l'élément indice [0] prend bien la valeur du modèle quand le dossier est vide ! neutral


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#28 Le 30/01/2022, à 13:35

Watael

Re : [RESOLU]traitement "chaîne de caratères"

pour éviter ça : shopt -s nullglob, ainsi, quand il n'y a pas de fichiers correspondant au motif, le tableau sera vide.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#29 Le 30/01/2022, à 13:48

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Merci Watael, je regarde ça ! cool
Bonne journée


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#30 Le 31/01/2022, à 10:01

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Bonjour Watael,

Watael poste #28 a écrit :

pour éviter ça : shopt -s nullglob, ainsi, quand il n'y a pas de fichiers correspondant au motif, le tableau sera vide.

c'est exact et je te remercie, mais j'ai dû le désactiver après avec un "shopt -u nullglob" car cela causait des problèmes plus loin dans le script . cool
Alors voici mon script en ayant tenu compte de vos remarques :

#!/bin/bash
#-------------------Recherche et extraction de données des fichier.txt www.data.gouv.fr décès entre 1970 et 2021----------------------
#------------------------------------- Auteur Frankkunst / Date 26 janvier 2022 ----------------------------------------------------
err_abandon=100
err_mauvarg=65
err_sanfich=66
mondoss="/home/$USER/TEMPNECRO"
mkdir -p "$mondoss"
presentation () {																				# texte de présentation et info
cat <<eof
			*** NECRODC ***		auteur : Frankkunst		version 01.2022

		Script de recherche des personnes décédées en France entre 1970 et 2021

	Étant prévu pour traiter exclusivement les fichiers .txt fournis sur www.data.gouv.fr, 	la présence des fichiers :

				deces-AAAA.txt	(52 fichiers 1970 à 2021)"

				commune2021.csv

				pays2021.csv

			est indispensable à son fonctionnement

	Selon votre connection internet leurs téléchargement peut s'avérer long ... 5,3 Go

	  Pour continuer appuyer sur "Valider"    Pour abandonner sur "Annuler"
eof
}
declare -a tablan=( {1970..2021} )
declare -a tabldecis=( "continuer-la-recherche" "arrêter-le-programme" )
					#--------------------------------* Présentation *-------------------------------------------------------------
zenity --title=INFORMATION --text-info --width="650" --height="450" --filename <(presentation) 2>/dev/null
if [ $? -eq 1 ]
then
	exit $err_abandon
fi
clear
					#--------------------------------* entrée arguments et contrôle *----------------------------------------------
dossier=$(zenity --file-selection --directory --title="Veuillez choisir le dossier de recherche" 2>/dev/null)
shopt -s nullglob
fichiersINSEE=( "$dossier"/deces-[0-9][0-9][0-9][0-9].txt )
if [ ${#fichiersINSEE[*]} -eq 0 ]
	then
		read -p "Pas de fichier INSEE ! Appuyer sur ENTRER"
		clear
		$0
		exit $err_sanfich
fi
shopt -u nullglob	
annee=$(zenity  --list --text="Veuillez selectionner l'année" --column="ANNEE" ${tablan[*]} 2>/dev/null)
nomprenom=$(zenity --entry --text="NOM	PRENOM	 à rechercher" --width="450" --height="140" 2>/dev/null)
set $nomprenom
nom=$1
prenom=$2
shopt -s extglob
case "$nom" in	      																		# controle format du "NOM"
	+([[:upper:]]) )  echo -e "\v\tVous recherchez une personne dénomée : "$nom ;; 			# controle que le nom soit en majuscule
	* ) clear ; echo -e "\v\v\v\v\v\tVous devez entrer un nom en \e[0;31;01m\"MAJUSCULE\"\e[30;00m uniquement, si c'est un nom composé entrez seulement la première partie\v\v\v\t\t\t"
	read -p "	Appuyer sur ENTRER pour recommencer" ; clear
	$0 ; exit $err_mauvarg
esac
if [ ${#prenom} -ne 0 ]
	then
	case "$prenom" in	      																# controle format du "PRENOM"
		+([[:upper:]]) ) echo -e "\v\tVous recherchez une personne prénomée : "$prenom ;; 	# controle prénom soit en majuscule
		* ) echo -e "\v\v\v\v\v\tVous devez entrer un prénom en \e[0;31;01m\"MAJUSCULE\"\e[30;00m uniquement la première partie \v\v\v\t\t\t"
		read -p "	Appuyer sur ENTRER pour recommencer" ; clear
		$0 ; exit $err_mauvarg
	esac
fi
					#------------------------------------* positionnement dans le dossier *----------------------------------------
cd "$dossier"
echo -n -e "\v\v\tDans : $PWD\tsur l'année $annee\r\v\v"
					#----------------------------* début du travail de recherche dans les fichiers *-------------------------------
suff=.txt
for i in $(ls *"$annee"$suff)
do
					#---------------------------------------* découpage donnée *---------------------------------------------------
grep -a "^$nom.*$prenom" $i >"$mondoss"/tempDC
		#  garde les lignes commençant par le "NOM" demandé et "PRENOM" si précisé
					#----------------------------------------* tri argument *------------------------------------------------------
n=0																			# amorçage compteur de lignes trouvées
	while read ligne
	do
	n=$[ $n+1 ]
		echo $n
		echo -n -e "\rNom : "${ligne%%"*"*}; ligneX=${ligne##*"*"}; echo -n -e " Prenom : "${ligneX%%"/"*}
		sexe=${ligne:80:1}
		if [[ $sexe -eq 1 ]]												# controle le sexe et le nomme
			then
				echo -n -e "\tgenre : \033[;;46mHomme\033[0m"
			else
				echo -n -e "\tgenre : \033[;;42mFemme\033[0m"
		fi
		echo -n -e "\tDate de naissance : "${ligne:87:2}"/"${ligne:85:2}"/"${ligne:81:4}"\tLieu : "${ligne:89:5}
		com=${ligne:94:30} ; commune=${com%%  *}
		echo -e "\tCommune : $commune"
		pay=${ligne:124:30} ; pay1=${pay%% *}
		if [[ ${#pay1} -eq 0 ]]												# teste si la donnée "Pays" est vide
			then 
				echo -n "Pays : FRANCE"
			else
				echo -n "Pays : $pay"
		fi
		echo -n -e "\nDate de décès : "${ligne:160:2}"/"${ligne:158:2}"/"${ligne:154:4}"\tLieu : "${ligne:162:5}
		codecom=${ligne:162:5}
		grep $codecom $PWD/commune2021.csv > /dev/null
		codesortx=$?
		if [[ $codesortx -eq 0 ]]
			then
				sortiecode=$(grep $codecom $PWD/commune2021.csv)
				retcom=(*,*,*,*,*,*,*,)
				communedc=${sortiecode#$retcom}
				echo -e "\tCommune de décès : "${communedc%%,*}
			else
				sortiecodepays=$(grep $codecom $PWD/pays2021.csv)
				retpays=(*,*,*,*,*,)
				paysdc=${sortiecodepays#$retpays}
			echo -e "\tPays de décès : "${paysdc%%,*}
		fi
		act=${ligne:167:9} ; acte=${act%% *}
		echo -e "\tacte de décès n° $acte\r\v\v"
	done < "$mondoss"/tempDC
	echo $n &>>"$mondoss"/compte-resultat2
done
declare -i z=0
for i in $(cat $mondoss/compte-resultat2); do (( z = $z + $i )) ; done
echo -e "\v\v\tIl y a $z résultat(s)\v\t"
rm "$mondoss"/compte-resultat2
decision=$(zenity --list  --text="Que voulez-vous faire ?" --column="décision" ${tabldecis[*]} 2>/dev/null)
case $decision in
continuer-la-recherche ) clear ; $0 ;;
arrêter-le-programme )
esac
exit 0

Dernière modification par Frankkunst (Le 31/01/2022, à 15:44)


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#31 Le 31/01/2022, à 10:20

Watael

Re : [RESOLU]traitement "chaîne de caratères"

j'ai dû le désactiver après avec un "shopt -u nullglob" car cela causait des problèmes plus loin dans le script

lesquels ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#32 Le 31/01/2022, à 10:29

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Dans cette section :

if [[ $codesortx -eq 0 ]]
			then
				sortiecode=$(cat $PWD/commune2021.csv | grep $codecom)
				retcom=(*,*,*,*,*,*,*,)
				communedc=${sortiecode#$retcom}
				echo -e "\tCommune de décès : "${communedc%%,*}
			else
				sortiecodepays=$(cat $PWD/pays2021.csv | grep $codecom)
				retpays=(*,*,*,*,*,)
				paysdc=${sortiecodepays#$retpays}
			echo -e "\tPays de décès : "${paysdc%%,*}
		fi

Je ne tombait plus dans la bonnes plage des données de fichier .csv et me sortait au lieu de la commune la donnée "COM"
Mais maintenant c'est ok
Merci encore à tous smile smile cool


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#33 Le 31/01/2022, à 10:44

Watael

Re : [RESOLU]traitement "chaîne de caratères"

tu sais que le cut, ici :

cat $i | grep -a "^$nom" | grep -w "$prenom" | cut -b 1-80,81,82-89,90-94,95-124,125-154,155-162,163-167,168-176 > "$mondoss"/tempDC

ne sert à rien* ?
tu "découpes" la ligne selon les spécifications du fichier, mais tu "découpes" la ligne entière : il n'y a aucune extraction de données !

--
* le cat non plus.
et je ne suis pas convaincu par l'enchaînement de greps.
pourquoi pas grep "^$nom*$prenom" "$ficherDB" ?
et pour éviter l'emploi de fichiers temporaires, je "collerais" ça dans un tableau, éventuellement avec mapfile...

Dernière modification par Watael (Le 31/01/2022, à 10:45)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#34 Le 31/01/2022, à 11:18

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Watael a écrit :

tu sais que le cut, ici :

cat $i | grep -a "^$nom" | grep -w "$prenom" | cut -b 1-80,81,82-89,90-94,95-124,125-154,155-162,163-167,168-176 > "$mondoss"/tempDC

ne sert à rien* ?

C'est juste, mais au moment de la création comme je testais au fur et à mesure, cela ma bien aidé au montage des commande suivante hmm
Je viens de modifier , j'ai supprimé le "cut ..."
Pour la succession de "grep", j'en conviens c'est un peu lourd mais j'ai fait pas mal d'essais infructueux , qui ne me satisfaisait pas !
Par exemple quand lors de la recherche on ne rentre pas de prénom, ou le prénom n'est pas complet et le nombre de sortie est trop important sad
Alors j'entends bien ta remarque et j’essaie d'améliorer la chose ... tongue


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#35 Le 31/01/2022, à 11:40

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Watael j'ai fait de nouveaux test, un petit exemple je recherche un M. TARTANPION bon c'est pas évident prenons un nom commençant par "TARTAN" .
Voilà, je me suis mis dans le dossier et :

frank@ordiport:~/Data_Deces/fichier_deces$ grep "^TARTAN" "deces-2020.txt"
TARTANE*LUCIEN JEAN-MARIE/                                                      11957050375114PARIS 14E  ARRONDISSEMENT                                   202012110281098                             
frank@ordiport:~/Data_Deces/fichier_deces$ grep "^TARTAN*LUCIEN" "deces-2020.txt"
frank@ordiport:~/Data_Deces/fichier_deces$ echo $?
1
frank@ordiport:~/Data_Deces/fichier_deces$

Donc la recherche avec un grep "^TARTAN*LUCIEN" "deces-2020.txt" ne fonctionne pas même en mettant le nom complet "TARTANE*LUCIEN" !?...
Est-ce "*" qui dérange car le modèle juste n'est pas retrouvé avec le grep ?


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#36 Le 31/01/2022, à 11:45

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

J'ai testé avec "TARTANE*" ou "TAR*" et pas de problème, mais si je mets des caractère après l' * plus de résultat !


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#37 Le 31/01/2022, à 12:13

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Avec

grep -a "^$nom" $i | grep -w "$prenom" >"$mondoss"/tempDC

C'est bon ça fait le job ! cool


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#38 Le 31/01/2022, à 12:36

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Avec

grep -a "^$nom[*]$prenom" $i >"$mondoss"/tempDC

cela fonctionne, mais plus restrictif obligation de rentrer le nom complet, donc cela ne me satisfait pas vraiment
Si on ne se souvient pas de l'orthographe exacte du nom en entrant seulement le début dans la solution précédente on a des résultats


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#39 Le 31/01/2022, à 12:47

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Encore un grand merci à tous cool cool cool
Mon script a gagné en vélocité et clarté, c'est top

Dernière modification par Frankkunst (Le 31/01/2022, à 12:49)


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#40 Le 31/01/2022, à 12:55

Vobul

Re : [RESOLU]traitement "chaîne de caratères"

Et ça ne t'intéresserait pas de mettre les données dans une base SQL (genre sqlite ou mariadb/mysql) ? Ça permettrait de query super facilement avec toute la puissance du langage SQL. bash ça va un moment mais bon tongue


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#41 Le 31/01/2022, à 13:05

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Salut

Vobul a écrit :

Et ça ne t'intéresserait pas de mettre les données dans une base SQL (genre sqlite ou mariadb/mysql) ? Ça permettrait de query super facilement avec toute la puissance du langage SQL. bash ça va un moment mais bon tongue

C'est sympa à toi de me parler chinois lol , mais SQL , query ?... J'en suis à l'apprentissage du langage bash .


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#42 Le 31/01/2022, à 13:12

pingouinux

Re : [RESOLU]traitement "chaîne de caratères"

Bonjour,

Frankkunst #35 a écrit :
frank@ordiport:~/Data_Deces/fichier_deces$ grep "^TARTAN*LUCIEN" "deces-2020.txt"

C'est normal que tu n'obtiennes rien : tu cherches les chaînes TARTANLUCIEN, TARTANNLUCIEN, TARTANNNLUCIEN, etc…

Il faut faire :

grep "^TARTAN.*LUCIEN" "deces-2020.txt"

ou

grep "^TARTANE\*LUCIEN" "deces-2020.txt"

Hors ligne

#43 Le 31/01/2022, à 13:28

Vobul

Re : [RESOLU]traitement "chaîne de caratères"

Frankkunst a écrit :

Salut

Vobul a écrit :

Et ça ne t'intéresserait pas de mettre les données dans une base SQL (genre sqlite ou mariadb/mysql) ? Ça permettrait de query super facilement avec toute la puissance du langage SQL. bash ça va un moment mais bon tongue

C'est sympa à toi de me parler chinois lol , mais SQL , query ?... J'en suis à l'apprentissage du langage bash .

Bah quand tu y arriveras tu comprendras ma remarque. En gros l'idée c'est que tu utilises ton script bash pour injecter les données de ton fichier texte dans une base de données relationelle. Puis tu peux faire des choses comme :

SELECT firstname, lastname FROM people WHERE death_date < 2000-01-01 AND lastname LIKE 'TARTE%'

Après tu peux même t'amuser à faire une petite interface web avec un champ de recherche et tout !


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

Hors ligne

#44 Le 31/01/2022, à 15:23

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Pingouinux #42 a écrit :

Il faut faire :

grep "^TARTAN.*LUCIEN" "deces-2020.txt"

ou

grep "^TARTANE\*LUCIEN" "deces-2020.txt"

C'est la première solution avec le "." qui est la bonne, avec cette écriture en connaissant seulement le début du nom et un des prénoms la recherche aboutie cool
Merci beaucoup à toi smile


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#45 Le 31/01/2022, à 15:49

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Voilà, j'ai corrigé le script en #30 en supprimant la plupart des "cat"
Et après plusieurs tests , avec cela, j'ai l'impression qu'il n'y a pas d'accros, et qu'il travaille un peu plus vite cool cool cool

Dernière modification par Frankkunst (Le 31/01/2022, à 16:34)


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#46 Le 31/01/2022, à 15:59

Watael

Re : [RESOLU]traitement "chaîne de caratères"

corrigé lol

il y a un astérisque littéral dans le champ nomPrénom du fichier pour distinguer (raymond) petitjean (petijean*raymond) de (jean) petit (petit*jean).
c'est celui-là que je t'indiquais.

Dernière modification par Watael (Le 31/01/2022, à 18:25)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#47 Le 31/01/2022, à 16:40

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Où tu as vu une faute d'orthographe ?... moi jamais lol lol lol
Pas de problème, mais la bonne solution est celle que m'a apporté Pingouinux :
grep "^TARTAN.*LUCIEN" "deces-2020.txt"
Il faut que j'étudie ce fonctionnement de plus près, mais cela fonctionne à merveille !
Merci à vous wink


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#48 Le 01/02/2022, à 07:07

MicP

Re : [RESOLU]traitement "chaîne de caratères"

Bonjour

Quelques tests avec différents motifs de recherche :

michel@debbull:~$ cat aeffacer    # je vérifie qu'il n'existe pas encore
cat: aeffacer: Aucun fichier ou dossier de ce type
michel@debbull:~$ 
michel@debbull:~$ cat > aeffacer   # je créé le fichier en entrant au clavier chaque ligne et je termine la saisie par Ctrl-D
TARTANE*LUCIEN JEAN-MARIE
TARTANE*LUCIENNE
TARTAN.*LUCIEN
TARTANx*LUCIEN
TARTAN*LUCIEN     
TARTANetplusLUCIEN
TARTANNE*LUCIEN
TARTANE LUCIEN
TARTANELUCIEN
TARTANxxxxLUCIEN
TARTANc*LUCIEN
michel@debbull:~$ 
michel@debbull:~$ grep "^TARTAN.*LUCIEN" aeffacer
TARTANE*LUCIEN JEAN-MARIE
TARTANE*LUCIENNE
TARTAN.*LUCIEN
TARTANx*LUCIEN
TARTAN*LUCIEN     
TARTANetplusLUCIEN
TARTANNE*LUCIEN
TARTANE LUCIEN
TARTANELUCIEN
TARTANxxxxLUCIEN
TARTANc*LUCIEN
michel@debbull:~$ 
michel@debbull:~$ grep "^TARTAN.\*LUCIEN" aeffacer
TARTANE*LUCIEN JEAN-MARIE
TARTANE*LUCIENNE
TARTAN.*LUCIEN
TARTANx*LUCIEN
TARTANc*LUCIEN
michel@debbull:~$ 
michel@debbull:~$ grep "^TARTANE\*LUCIEN" aeffacer
TARTANE*LUCIEN JEAN-MARIE
TARTANE*LUCIENNE
michel@debbull:~$ 
michel@debbull:~$ grep "^TARTANE\*LUCIEN " aeffacer
TARTANE*LUCIEN JEAN-MARIE
michel@debbull:~$ 
michel@debbull:~$ rm aeffacer
michel@debbull:~$ 

Dernière modification par MicP (Le 01/02/2022, à 07:19)

Hors ligne

#49 Le 01/02/2022, à 09:44

Frankkunst

Re : [RESOLU]traitement "chaîne de caratères"

Salut MicP

Comme j'ai noté en #44 a écrit :

C'est la première solution avec le "." qui est la bonne, avec cette écriture en connaissant seulement le début du nom et un des prénoms la recherche aboutie

en voici l'exemple de recherche sur un fichier de 679'924 décés :

frank@ordiport:~/Data_Deces/fichier_deces$ grep "^TARTAN.*LUCIEN" "deces-2020.txt"
TARTANE*LUCIEN JEAN-MARIE/                                                      11957050375114PARIS 14E  ARRONDISSEMENT                                   202012110281098                             
frank@ordiport:~/Data_Deces/fichier_deces$ grep "^TARTAN\*LUCIEN" "deces-2020.txt"
frank@ordiport:~/Data_Deces/fichier_deces$ grep "^TARTANE\*LUCIEN" "deces-2020.txt"
TARTANE*LUCIEN JEAN-MARIE/                                                      11957050375114PARIS 14E  ARRONDISSEMENT                                   202012110281098                             
frank@ordiport:~/Data_Deces/fichier_deces$ grep "^TARTANE\*LUCIE" "deces-2020.txt"
TARTANE*LUCIEN JEAN-MARIE/                                                      11957050375114PARIS 14E  ARRONDISSEMENT                                   202012110281098                             
frank@ordiport:~/Data_Deces/fichier_deces$ grep "^TARTA.*LUCIEN" "deces-2020.txt"
TARTAIX*LUCIEN HENRI/                                                           11928122938269LA MURE                                                     2020041283137784                            
TARTANE*LUCIEN JEAN-MARIE/                                                      11957050375114PARIS 14E  ARRONDISSEMENT                                   202012110281098                             
frank@ordiport:~/Data_Deces/fichier_deces$ grep "^TARTA.*LUC" "deces-2020.txt"
TARTAIX*LUCIEN HENRI/                                                           11928122938269LA MURE                                                     2020041283137784                            
TARTANE*LUCIEN JEAN-MARIE/                                                      11957050375114PARIS 14E  ARRONDISSEMENT                                   202012110281098                             
frank@ordiport:~/Data_Deces/fichier_deces$

Comme tu peux le constater, la solution la plus souple et efficace est  grep "^TARTA.*LUC" "deces-2020.txt"
Cela permet de retrouver une personne en ne se souvenant que du début du nom et du début d'un des prénoms
En tous cas, merci bien wink cool

Dernière modification par Frankkunst (Le 01/02/2022, à 09:47)


C'est en forgeant que l'on devient forgerons ...
et
...petit à petit l'oiseau fait son nid !

Hors ligne

#50 Le 01/02/2022, à 12:04

Watael

Re : [RESOLU]traitement "chaîne de caratères"

voilà ! tu as, là, tout ton script :

#!/bin/sh

read -r -p 'nom prénom' nom prenom
grep "^$nom.*$prenom" décès-*.txt

lol


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne