Dos

bertindenis Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   -
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.


9 réponses

Utilisateur anonyme
 
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.
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Pour extraire la case (4,5) et en admettant que les cellules soient délimitées par le caractère espace, tu peux lancer :

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
0
Utilisateur anonyme
 
<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é.
0
bertin
 
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
$ 
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
Au temps pour moi j'ai mal lu l'énoncé.

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.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
effectivement, sur un très gros fichier, c'est plus rapide sans le $0 ~ var
0
bertin
 
Merci à Tous, je suis très content pr votre soutien.
Bien d choses a toute l'équipe et merci encore pr toute l'attention que vous avez pr les membres...
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
J'en déduis que ton problème est résolu ? ;-)
--
0