Dos
Bonjour a tous les membres du Forum,
Excusez moi,je suis encore nouveau dans les commandes shell Linux;
je voudrais savoir comment visualiser la ligne et la colonne d'un mot dans un texte matriciel c'est a dire exemple:
le texte.txt est par exemple:
bob dou fou
rou sou reu
xou qou etr
et je recherche "sou"
il me stampe:
la ligne 2 et la colonne 2??
je reussis juste à stamper la ligne en ecrivant:
grep -n -w sou texte.txt
et il me stampe 2 sou,mais je veux aussi la colonne.
merci d'avance et bonne soirée à tous.
En faite tout ceci est un SCRIPT.
Excusez moi,je suis encore nouveau dans les commandes shell Linux;
je voudrais savoir comment visualiser la ligne et la colonne d'un mot dans un texte matriciel c'est a dire exemple:
le texte.txt est par exemple:
bob dou fou
rou sou reu
xou qou etr
et je recherche "sou"
il me stampe:
la ligne 2 et la colonne 2??
je reussis juste à stamper la ligne en ecrivant:
grep -n -w sou texte.txt
et il me stampe 2 sou,mais je veux aussi la colonne.
merci d'avance et bonne soirée à tous.
En faite tout ceci est un SCRIPT.
9 réponses
salut,
en 100% shell, c'est pas très compliqué.
il faut que tu saches comment
- parser un fichier
- parser les éléments qui composent une ligne
- incrémenter des variables numériques
il y a de bons tutos sur ce site, tu devrais trouver comment faire tout ça.
en 100% shell, c'est pas très compliqué.
il faut que tu saches comment
- parser un fichier
- parser les éléments qui composent une ligne
- incrémenter des variables numériques
il y a de bons tutos sur ce site, tu devrais trouver comment faire tout ça.
Pour extraire la case (4,5) et en admettant que les cellules soient délimitées par le caractère espace, tu peux lancer :
Autre approche, tu peux utiliser awk (fonctionne si le délimiteur de cellule est espace ou tabulation, sinon tu dois préciser à awk ce délimiteur) :
Pour plus de détails sur ces commandes :
Bonne chance
head -n4 matrice.txt | tail -n1 | cut -d" " -f5
Autre approche, tu peux utiliser awk (fonctionne si le délimiteur de cellule est espace ou tabulation, sinon tu dois préciser à awk ce délimiteur) :
awk '(NR == 4) {print $5}' matrice.txt
Pour plus de détails sur ces commandes :
man head man tail man cut man awk
Bonne chance
<cite>Bonne chance</cite>je crois que bertindenis tente ça chance au lâché de friandises, maintenant :))
des fois que dans l'emballage lui soit donné la solution :(
ce que propose l'excellent(e) mamiemando ne fonctionne pas ici, car il ne s'agit pas de dire ce qu'il y a à une certaine position qu'on connaît, mais plutôt de donner la position, qu'on ne connaît pas, d'un élément donné.
des fois que dans l'emballage lui soit donné la solution :(
ce que propose l'excellent(e) mamiemando ne fonctionne pas ici, car il ne s'agit pas de dire ce qu'il y a à une certaine position qu'on connaît, mais plutôt de donner la position, qu'on ne connaît pas, d'un élément donné.
Bjour a tous,
oui je pense que monsieur mamiemando n'a pas epluché ma demande exacte. car il sagit d passer le mot ou l'entier à rechercher au file.txt et d retrouver la ligne et la colonne.
merci tout de meme.
oui je pense que monsieur mamiemando n'a pas epluché ma demande exacte. car il sagit d passer le mot ou l'entier à rechercher au file.txt et d retrouver la ligne et la colonne.
merci tout de meme.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
hello
$ cat a3 bob dou fou rou sou reu xou qou etr $ $ awk -v var="sou" '$0 ~ var {for(n=1;n<=NF;n++)if($n == var){print NR, n; exit}}' a3 2 2 $ $ awk -v var="etr" '$0 ~ var {for(n=1;n<=NF;n++)if($n == var){print NR, n; exit}}' a3 3 3 $ $ awk -v var="bob" '$0 ~ var {for(n=1;n<=NF;n++)if($n == var){print NR, n; exit}}' a3 1 1 $
Au temps pour moi j'ai mal lu l'énoncé.
Après l'avoir relu, j'aurais presque fait comme dubcek l'indique :
Dans la solution de dubcek (qui marche) le test "$0 ~ var" (chercher si la valeur de var, par exemple "sou" est dans la ligne courante ($0)) est redondant avec le if.
Comme ce test ne permet pas d'accélérer le programme (je dirais même qu'il le ralentit puisqu'il va falloir évaluer l'expression régulière et lire toute la ligne pour vérifier si le test est vrai ou faut), je ne le mettrais pas.
Merci pour vos remarques et merci à dubcek pour sa solution.
Après l'avoir relu, j'aurais presque fait comme dubcek l'indique :
awk -v var="sou" '{for(i = 1; i <= NF; i++) { if ($i == var) {print NR, i; exit } } }' a3
Dans la solution de dubcek (qui marche) le test "$0 ~ var" (chercher si la valeur de var, par exemple "sou" est dans la ligne courante ($0)) est redondant avec le if.
Comme ce test ne permet pas d'accélérer le programme (je dirais même qu'il le ralentit puisqu'il va falloir évaluer l'expression régulière et lire toute la ligne pour vérifier si le test est vrai ou faut), je ne le mettrais pas.
Merci pour vos remarques et merci à dubcek pour sa solution.