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.

#1 Le 08/03/2013, à 13:30

ar barzh paour

[Résolu] choix pour des recherches dans des fichiers

bonjour à tous
le problème
j'utilise actuellement des fichiers textes formatés ainsi
champ1;champ2;champ3;.......;champn
et j'effectue une(des) recherche(s) dans ces fichiers en lançant un shell
le shell utilise bien sur des boucles de lecture de lignes dans les fichiers,  des sed , des grep ,
tout va très bien quand le fichier n'est pas trop gros mais j'arrive maintenant à des temps de recherche trop long

la solution ?
je pensais m'orienter vers mysql, j'ai commencé à rechercher dans la doc et le forum
le forum donne souvent des réponses à des questions trop anciennes (ou je ne sais pas effectuer les bonnes recherches)

je trouve déjà dans les dépots trois mysql
mysql-server
mysql-client
mysql-common
lequel faut-il installer ?
remarque : les "données" que j'utilise sont sur mon PC et ne servent qu'à moi (pas d'accès internet , tout au moins pour l'instant)
suis-je dans la bonne direction ou bien dois-je m'orienter vers autre chose ?

edit pour correction de fautes d'orthographe

Dernière modification par ar barzh paour (Le 11/02/2014, à 07:36)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#2 Le 08/03/2013, à 13:40

credenhill

Re : [Résolu] choix pour des recherches dans des fichiers

hello
awk peut faire beaucoup en ne lisant qu'une fois le fichier

Hors ligne

#3 Le 08/03/2013, à 14:27

pingouinux

Re : [Résolu] choix pour des recherches dans des fichiers

Bonjour,
Tu peux éventuellement montrer ton script, il se peut qu'il soit possible de le simplifier. Sinon, je suis d'accord avec credenhill pour awk.

Hors ligne

#4 Le 08/03/2013, à 15:51

tiramiseb

Re : [Résolu] choix pour des recherches dans des fichiers

Tout pareil, ne va pas installer MySQL juste pour ça (à part si tes données dépassent quelques dizaines ou centaines de milliers de lignes)...
On peut certainement optimiser ton script...

Hors ligne

#5 Le 08/03/2013, à 18:57

ar barzh paour

Re : [Résolu] choix pour des recherches dans des fichiers

"je bricole" , c'est certainement pas très accadémique ....
un extrait de mon code

#!/bin/bash
shopt -s extglob

# function print_debut écrit un début de recherche sur écran et dans un fichier=======================
function print_debut {	#	$1=fichier de recherche	$2=mot recherché 	$n autres
echo "============================================================="
echo "============================================================="	>> $fich
echo -e "recherche :\c"
echo -e "recherche :\c"		>> $fich
for i
	do
		echo -e " $i\c"
		echo -e " $i\c"	>> $fich
	done
echo
echo >> $fich
echo >> $fich

}
#fin function print_debut==========================================
# function nw_ok ==============================================
function nw_OK { # reçoit $1=le texte où effectuer la recherche

ok=1
l1=$( sed 's/;/ /g' <<< $1 )

for champ in $l1
do

	case $posi in
		"COMM")
			if grep -iq "^$memd" <<< $champ
				then
					ok=0
					break
				fi		
		;;
		"FIN_")
			if grep -iq "$memf$" <<< $champ
				then
					ok=0
					break
				fi
		;;
		"CONT")
			if grep -iq "$memm" <<< $champ
				then
					ok=0
					break
				fi
		;;
		"EXAC")
			if ( (grep -iq "^$memm" <<< $champ ) && ( grep -iq "$memm$" <<< $champ ) )
				then
					ok=0
					break
				fi
		;;

		"COFI")
			if ( ( grep -iq "^$memd" <<< $champ ) && ( grep -iq "$memf$" <<< $champ )  )
				then
					ok=0
					break
				fi
		;;
	esac


done
#read g
return $ok
}
function nw_recherche_dans_dico {	#recoit	$1=mot à chercher $2=lang $3=posi
					# code de retour #0 si trouvé
fichier=./dico.txt
		#trace $1 $2 $3
print_debut $fichier "$1 (lang : $lang posi: $posi)"
nb=0
nb_tab=0 #pour le nombre de lignes trouvées
exec 3<$fichier # ouverture du fichier en lecture sur le descripteur 3
while read -u3 ligne	# LIRE UNE Ligne
do
	if [[ "$2" = "BRET" ]]
		then
		champ=`echo "$ligne"|cut -d';' -f1`
				#trace $champ
	fi
	if [[ "$2" = "FRAN" ]]
		then
		champ=`echo "$ligne"|cut -d';' -f3`
	fi
	if [[ "$2" = "TOUT" ]]
		then
		champ="$ligne"
	fi

	nw_OK  "$champ" "$1"
	if  [[ $? = 0  ]]
		then
			nb=0 # comptage pour l'affichage des "."
			echo ; echo "$ligne" 
			echo "$ligne" >> $fich
			((nb_tab=$nb_tab+1)) # comptage des lignes trouvées
	
		else
			((nb=$nb+1)) # comptage pour l'affichage des "."
			if [[ $nb -gt 300 ]]
				then
					car=`cut -c1 <<<$ligne`
					echo -n $car
					nb=0
			fi
	fi
done
exec 3<&-	#fermeture du descripteur de lecture 3

print_fin $fichier $1 "( $nb_tab ligne(s) trouvée(s) )"
}
#fin fonction=======================================
# ce qui lance la recherche 
$mot est la séquence recherchée ( pas de caractères ? ou *), 
$lang vaut BRET FRAN ou TOUT 
$posi indique si on recherche un début ,une fin,un milieu,exactement

if [[ "$dico" = "TRUE" ]] #AV1;0;traduction;type;plur_rad;pl];m],f]
	then
	nw_recherche_dans_dico "$mot" $lang $posi
fi

# le fichier de recherche n'est pas très très gros (15000 lignes)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#6 Le 08/03/2013, à 23:05

pingouinux

Re : [Résolu] choix pour des recherches dans des fichiers

Je ne vois pas où sont définis memd, memm et memf.
D'autre part, tu peux remplacer

echo -e "recherche :\c"
echo -e "recherche :\c"         >> $fich

par

echo -e "recherche :\c" | tee -a "$fich"

Prendre aussi l'habitude de mettre les variables entre " ", au cas où elles contiendraient des espaces.

Hors ligne

#7 Le 09/03/2013, à 10:18

ar barzh paour

Re : [Résolu] choix pour des recherches dans des fichiers

pour memx , il y a dans mon code une ligne
analyse_mot $mot
et la fonction correspondante
le mot est un mot sans espace pouvant 1-commencer par ~ , 2-finir par ~ 3-commencer et finir par ~ 4-sans ~


# function analyse_mot =====================================================
function analyse_mot { 
		# reçoit $1 recherche à effectuer , les * ont été remplacées par ~
		# renvoie  posi : 4 valeurs possibles : COMM / FIN_ / COFI / CONT 
		# renvoie  memm memd et memf mis  à leur valeur correctes (milieu début fin)
		# en fait memm memd memf devrait suffire
	# memm <> "" => CONT sans comm et sans fin_
	# memd <> "" => COMM
	# memf <> "" => FIN_
m=$1
car1=`cut -c1   <<< $m` 		# 1er caractère du mot
lg=${#m} ; carf=`cut -c$lg <<< $m` 	# dernier caractère du mot
memm="" ; memd="" ; memf=""
if [[ "$car1" = "~" ]]
	then
		if [[ "$carf" = "~" ]]
		then
			posi="CONT" 
			memm=`sed 's/\~//g' <<< $1`	# ~xyz~ memm= xyz
		else
			posi="FIN_" 
			memf=`echo ${m##*~}`		# ~xyz memf=xyz
		fi
	else #   soit ====== soit =====~ soit ===~====
		memd=`echo ${m%%~*}` # dans les 2 cas	
		if [[ "$carf" = "~" ]]
		then
			posi="COMM" 
		else
			posi="COFI" 
			memf=`echo ${m##*~}`	# ~------   dernier champ
			if [[ $memf = $memd ]] # à remplacer par un test au début , s'il n'y a pas d'* ....
				then 
					memm=$memd
					posi="EXAC"
			fi
		fi
fi

echo "memm "$memm
echo "memd "$memd
echo "memf "$memf
echo "posi "$posi
}
# fin function function analyse_mot ========================================

je pense qu'effectivement c'est (un peu) compliqué , mais le ralentissement n'est pas là , ce passage n'est effectué qu'un seule fois au début

par contre je m'aperçois que dans la fonction nw_recherche_dans_dico , au lieu de faire le test de $2 sur chaque ligne je pourrais le faire une seule fois , quitte à rallonger le code

j'ai eu la mauvaise idée de vouloir copier un code que j'avais écrit pour tout autre chose, mais qui me paraissait pouvoir convenir , l'adaptation s'en ressent


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#8 Le 09/03/2013, à 10:23

tiramiseb

Re : [Résolu] choix pour des recherches dans des fichiers

je m'aperçois que dans la fonction nw_recherche_dans_dico , au lieu de faire le test de $2 sur chaque ligne je pourrais le faire une seule fois

En effet c'est le genre d'optimisations qui peut faire gagner BEAUCOUP en perfs.

Parfois même il existe des approches qu'on n'imagine pas tout seul, qui peuvent améliorer les perfs d'un facteur 10 (changer de logiciel, changer d'approche......)

J'avais lu il y a quelques mois un article d'un gars qui envisageait de changer de langage car son script shell prenait trop de temps (de l'ordre des 10 minutes je crois), et après optimisation le temps d'exécution du script est passé à 10 secondes, quelque chose dans ce goût-là...


Peux-tu redonner ton script entier, en un bloc ? Ça nous aiderait à y voir plus clair...

Hors ligne

#9 Le 09/03/2013, à 12:48

ar barzh paour

Re : [Résolu] choix pour des recherches dans des fichiers

non plus de 1000 lignes de codes !!
tout ce qui peut ralentir est ci-dessus , les autres lignes ne sont que des vérifications , ou concernent d'autres recherches.
ce qui prend du temps :
lire ligne par ligne (15000 lignes à lire)
et les tests pour  chaque ligne
analyser chaque ligne:
prendre le 1er champ
en fonction du mot recherché , analyser si le mot recherché est au début,en fin,est exactement, ou contenu dans ce champ

je peux gagner du temps en faisant ceci:
si le mot recherché est un début , lire le fichier, analyser si le mot recherché est au début du 1er champ de chaque ligne
si le mot recherché est en fin      , lire le fichier, analyser si le mot recherché est en fin  du 1er champ de chaque ligne
si le mot recherché exactement  , lire le fichier, analyser si le mot recherché le 1er champ de chaque ligne
si le mot recherché est contient , lire le fichier, analyser si le mot recherché est contenu dans le 1er champ de chaque ligne
donc ok pour le 1er champ
mais alors il faudrait  que je fasse la même chose pour le 2ème champ , pour le 3ème etc
autant tout refaire , c'est pourquoi je me demandais s'il ne valait mieux pas passer par un BDD , puis requête SQL

Dernière modification par ar barzh paour (Le 09/03/2013, à 12:50)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#10 Le 09/03/2013, à 13:06

tiramiseb

Re : [Résolu] choix pour des recherches dans des fichiers

non plus de 1000 lignes de codes !!

Pas étonnant que ton script soit lent alors ! big_smile

Ne peux-tu pas mettre ton script sur un serveur (dans un gist ou autre chose par exemple), ainsi que des données de test ?

Encore une fois, il y a peut-être une solution que tu n'imagines pas et qu'on ne peut trouver qu'avec l'intégralité du script.


Par ailleurs, pour ma part quand ça dépasse une cinquantaine de lignes, je change de langage, au profit de Python...

Hors ligne

#11 Le 09/03/2013, à 13:25

tiramiseb

Re : [Résolu] choix pour des recherches dans des fichiers

Après m'être (difficilement) plongé dans ton code, il me semble que le plus gros problème est ta lecture ligne à ligne du fichier et la réexécution, pour chaque ligne, de la fonction nw_OK.

Si on voit l'ensemble (nw_recherche_dans_dico et nw_OK en tout cas), tu as plein de "if" dans un "for" dans un "while readline". Ça c'est super lent, c'est normal.

Il faudrait remplacer l'ensemble par des sed et grep globaux...


Il me semble que ton code peut être vachement simplifié, quand même... En plus 1000 lignes c'est énorme pour un script...

Hors ligne

#12 Le 09/03/2013, à 16:05

ar barzh paour

Re : [Résolu] choix pour des recherches dans des fichiers

très certainement optimisable ....
un exemple concret :
j'ai toujours le fichier de recherche structuré ainsi : champ1;champ2;champ3;    ; champn
sortir toutes les lignes dont le champ1 contient "enep"
==>il peut avoir des espaces dans "champ1"
==> ne pas tenir compte des majuscules/minuscules
je  saisie dans la recherche : "*enep*" qui est transformé en ~enep~ (pour éliminer difficultés produitent par le caractère * dans grep ou sed je ne sais plus)
pour dire que la recherche ne doit s'effectuer que dans le champ1 j'envoie "BRE=TRUE"
soit <nomdu shell> "MOT=~enep~" "BRE=TRUE"


1000 lignes de codes car ce code peut aussi rechercher dans d'autres fichiers qui eux n'ont pas la même structure ; il faudrait donc que je supprime tout ce qui ne concerne pas  cette recherche qui est longue (les autre fichiers sont moins conséquents , plus simple de structure , et ne posent pas de problème de longueur de recherche)

merci quand même pour votre effort

dans le cas concret ci-dessus comment feriez-vous ?

Dernière modification par ar barzh paour (Le 09/03/2013, à 16:10)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#13 Le 09/03/2013, à 19:13

tiramiseb

Re : [Résolu] choix pour des recherches dans des fichiers

dans le cas concret ci-dessus comment feriez-vous ?

Là tu parcours ton fichier ligne par ligne (avec while), pour extraire le champ ligne par ligne (avec cut), et rechercher une chaîne ligne par ligne (avec grep)... Si tu fais un "grep" avec la bonne expression rationnelle, tu peux peut-être avoir le même résultat en une seule commande...

Hors ligne

#14 Le 10/03/2013, à 07:53

ar barzh paour

Re : [Résolu] choix pour des recherches dans des fichiers

je ne résouds pas mon problème de temps avec shell :
le script (très épuré) recoit une chaine ( par exemple "ene"
je recherche dans mon fichier texte toutes les lignes qui commencent par "ene"
temps d'exécution : 25 secondes !!! , c'est beaucoup trop pour cette recherche très simple !!!!!!

#!/bin/bash
# reçoit $1: le début de mot à chercher
# le recherche se fait dans le premier champ de ./dico.txt , en fait en début de ligne 

fichier=./dico.txt

exec 3<$fichier # ouverture du fichier en lecture sur le descripteur 3
while read -u3 ligne	# LIRE UNE Ligne
do
	grep -iq "^$1" <<<$ligne # équivalent à : si la ligne (donc le champ1) commence par $1 
	if  [[ $? = 0  ]]
		then
			echo ; echo "$ligne" 
	fi
done
exec 3<&-	#fermeture du descripteur de lecture 3

@credenhill
je crois que je vais aller voir du côté de awk mais il faut que je retrouve la façon de passer une variable à awk , ce que je ne sais pas faire pour l'instant ( ci dessous j'ai mis une valeur fixe "ene" ) je crois c'est avec ARGV , en septembre 2012 j'avais déjà posté quelque chose sur awk

awk -F';' '$1 ~ /^ene/ {print $0}' ./dico.txt

shell me déçoit , plus exactement ne semble pas du tout convenir à ces recherches de texte dans un fichier

Dernière modification par ar barzh paour (Le 10/03/2013, à 09:08)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#15 Le 10/03/2013, à 10:44

tiramiseb

Re : [Résolu] choix pour des recherches dans des fichiers

exec 3<$fichier # ouverture du fichier en lecture sur le descripteur 3
while read -u3 ligne	# LIRE UNE Ligne
do
	grep -iq "^$1" <<<$ligne # équivalent à : si la ligne (donc le champ1) commence par $1 
	if  [[ $? = 0  ]]
		then
			echo ; echo "$ligne" 
	fi
done
exec 3<&-

Oh mon dieu ! Pas étonnant que tu aies des perfs minables si, selon toi, « rechercher dans un fichier texte toutes les lignes qui commencent par "ene" » ça se fait comme ça...

Les "while read" sont une solution de dernière chance, quand les "vraies" solutions (c'est-à-dire les capacités des commandes elles-mêmes à lire un fichier dans son ensemble) ne sont pas applicables, car c'est une solution très lente.

Tu peux remplacer tout ce bloc par la simple ligne suivante :

grep -i "^$1" $fichier

Tu devrais passer de 25 secondes à quelque chose comme 1 seconde...




Par ailleurs, par mesure de simplicité, si tu dois faire une telle bouche "while read" je te conseillerais plutôt la syntaxe suivante, vachement plus simple :

while read ligne
do
    [...]
done < "$fichier"

Pas besoin d'ouvrir un descripteur pour chaque fichier que tu veux lire smile

Dernière modification par tiramiseb (Le 10/03/2013, à 10:48)

Hors ligne

#16 Le 10/03/2013, à 11:07

credenhill

Re : [Résolu] choix pour des recherches dans des fichiers

passer une variable à awk

var=ene; awk -F";" -v var=$var '$1 ~ "^" var {print}' dico.txt

Dernière modification par credenhill (Le 10/03/2013, à 11:08)

Hors ligne

#17 Le 10/03/2013, à 13:24

ar barzh paour

Re : [Résolu] choix pour des recherches dans des fichiers

tiramiseb a écrit :

Tu peux remplacer tout ce bloc par la simple ligne suivante :
grep -i "^$1" $fichier
Tu devrais passer de 25 secondes à quelque chose comme 1 seconde...

évidemment y'a pas photo !!!
mais ça ne répond pas à mes critères de sélection , je ne recherche pas dans toute la ligne !!!!
cependant
je vais re-étudier tout mon code !!


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#18 Le 10/03/2013, à 13:34

tiramiseb

Re : [Résolu] choix pour des recherches dans des fichiers

mais ça ne répond pas à mes critères de sélection , je ne recherche pas dans toute la ligne !!!!

Peux-tu être plus précis ?

Là on ne recherche pas "dans toute la ligne", on recherche au début de la ligne, vu que l'expression rationnelle donnée à "grep" commence par "^".

Et si tu parles du cas pratique que tu as donné plus haut, il suffit de donner une expression rationnelle correcte.
Par exemple, si le format du fichier est le suivant :

"toto;plouf;tartempion;tralala"

... et que tu veux vérifier le 2me champ, alors ce serait quelque chose comme :

grep "^[^;]*;$valeur" $fichier

(où le contenu de "$valeur" serait, dans ce cas exemple, "plouf")


Et, au pire du pire, si tu ne peux pas donner une expression rationnelle qui correspond bien à ta recherche, alors tu peux mettre dans ton script, avant ton gros traitement, un "grep" sur le fichier complet pour rechercher ton mot particulier, ça te donnera un sous-ensemble qui sera mal ciblé (résultat trop "large"), mais ce sous-ensemble fera peut-être 10 ou 20 lignes, contre 15000... forcément le reste du script, pour identifier la ou les lignes qui t'intéresse(nt), sera plus rapide.

Dernière modification par tiramiseb (Le 10/03/2013, à 13:35)

Hors ligne

#19 Le 10/03/2013, à 13:44

credenhill

Re : [Résolu] choix pour des recherches dans des fichiers

ar barzh paour a écrit :

j'ai toujours le fichier de recherche structuré ainsi : champ1;champ2;champ3;    ; champn
sortir toutes les lignes dont le champ1 contient "enep"
==>il peut avoir des espaces dans "champ1"
==> ne pas tenir compte des majuscules/minuscules
dans le cas concret ci-dessus comment feriez-vous ?

var=EneP; awk -F";" -v var=$var 'BEGIN{IGNORECASE=1} $1 ~ var {print}' dico.txti

Dernière modification par credenhill (Le 10/03/2013, à 13:47)

Hors ligne

#20 Le 10/03/2013, à 13:51

tiramiseb

Re : [Résolu] choix pour des recherches dans des fichiers

credenhill a écrit :
var=EneP; awk -F";" -v var=$var 'BEGIN{IGNORECASE=1} $1 ~ var {print}' dico.txti

C'est un peu plus compliqué que

grep "^$var;" dico.txt

big_smile

Hors ligne

#21 Le 10/03/2013, à 13:58

ar barzh paour

Re : [Résolu] choix pour des recherches dans des fichiers

tiramiseb a écrit :

... et que tu veux vérifier le 2me champ, alors ce serait quelque chose comme :
grep "^[^;]*;$valeur" $fichier
(où le contenu de "$valeur" serait, dans ce cas exemple, "plouf")

ça se précise , j'ai du travail sur la planche....

credenhill a écrit :

je pense que mon erreur était d'écrire /^var/ au lieu de /^ var/ dans mon script awk

j'arrête pour aujourd'hui
merci à tous les deux


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#22 Le 10/03/2013, à 14:00

credenhill

Re : [Résolu] choix pour des recherches dans des fichiers

@tiramiseb
et les majuscules/minuscules et les espaces  roll
et tout traitement subséquent se fera dans awk, pas besoin de tes while read ...

Dernière modification par credenhill (Le 10/03/2013, à 14:01)

Hors ligne

#23 Le 10/03/2013, à 14:30

tiramiseb

Re : [Résolu] choix pour des recherches dans des fichiers

@tiramiseb
et les majuscules/minuscules et les espaces

À voir comment les majuscules, les minuscules et les espaces doivent être traités.

Par exemple, si les vérifications doivent être "case-insensitive", il suffit d'utiliser l'argument "-i" de grep...

pas besoin de tes while read ...

Je suis justement en train de conseiller d'enlever les "while read" pour les remplacer par "grep" etc...

et tout traitement subséquent se fera dans awk,

En gros tu fais un script dans un script ? big_smile

Hors ligne

#24 Le 10/03/2013, à 15:33

credenhill

Re : [Résolu] choix pour des recherches dans des fichiers

tiramiseb a écrit :

À voir comment les majuscules, les minuscules et les espaces doivent être traités.

il suffit de lire

ar barzh paour a écrit :

sortir toutes les lignes dont le champ1 contient "enep"
==>il peut avoir des espaces dans "champ1"
==> ne pas tenir compte des majuscules/minuscules

Hors ligne

#25 Le 10/03/2013, à 21:27

tiramiseb

Re : [Résolu] choix pour des recherches dans des fichiers

credenhill a écrit :

il suffit de lire

ar barzh paour a écrit :

sortir toutes les lignes dont le champ1 contient "enep"
==>il peut avoir des espaces dans "champ1"
==> ne pas tenir compte des majuscules/minuscules

Il faut croire que je n'ai pas assez bien lu smile

Cela donne donc :

grep -i "^[^;]*$valeur" $fichier

Dernière modification par tiramiseb (Le 10/03/2013, à 21:28)

Hors ligne