Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 11/06/2010, à 20:40

wido

[résolu] Calculer nombre de ligne par rapport à la position valeur

Bonjour,
je désirerais savoir comment on connait la position d'une valeur dans un texte en nombre de ligne voici un exemple:

==> Found audio stream: 132
==> Found audio stream: 131
==> Found audio stream: 130
==> Found audio stream: 129
==> Found audio stream: 128

j'ai la valeur 129 qui se trouve à la ligne n°4 mais comment fait-on en ligne de commande?

j'ai essayé avec wc -l mais elle me donne le nombre total de ligne.

Dernière modification par wido (Le 11/06/2010, à 21:01)

Hors ligne

#2 Le 11/06/2010, à 20:51

alej

Re : [résolu] Calculer nombre de ligne par rapport à la position valeur

Si j'ai bien compris, p.e...

$ cat toto
==> Found audio stream: 132
==> Found audio stream: 131
==> Found audio stream: 130
==> Found audio stream: 129
==> Found audio stream: 128
$ sed -n '/129/=' toto
4

Hors ligne

#3 Le 11/06/2010, à 21:00

wido

Re : [résolu] Calculer nombre de ligne par rapport à la position valeur

c'est complétement ça big_smile

Hors ligne

#4 Le 11/06/2010, à 22:30

alex2423

Re : [résolu] Calculer nombre de ligne par rapport à la position valeur

alej a écrit :

Si j'ai bien compris, p.e...

$ cat toto
==> Found audio stream: 132
==> Found audio stream: 131
==> Found audio stream: 130
==> Found audio stream: 129
==> Found audio stream: 128
$ sed -n '/129/=' toto
4

Je connais un peu vim et donc indirectement sed mais je ne comprends pouquoi tu as mis "="

Juste par curiosité A quoi sert il ?

Hors ligne

#5 Le 11/06/2010, à 22:39

alej

Re : [résolu] Calculer nombre de ligne par rapport à la position valeur

« Print Line Number

An equal sign ( = ) following an address prints the line number of the matched line »

(source : sed & awk, Second Edition by Dale Dougherty and Arnold Robbins © 1997, 1990 O'Reilly & Associates, Inc. - page 95)

Hors ligne

#6 Le 11/06/2010, à 22:45

zapple

Re : [résolu] Calculer nombre de ligne par rapport à la position valeur

un simple :

grep -n 129 toto

suffit

Hors ligne

#7 Le 11/06/2010, à 22:51

alej

Re : [résolu] Calculer nombre de ligne par rapport à la position valeur

$ sed -n '/129/=' toto
4

$ grep -n 129 toto
4:==> Found audio stream: 129

On notera la légère différence... wink

Hors ligne

#8 Le 11/06/2010, à 23:02

zapple

Re : [résolu] Calculer nombre de ligne par rapport à la position valeur

La question était de savoir à quelle ligne se trouve l'expression qu'il veut, et il l'a.

Hors ligne

#9 Le 11/06/2010, à 23:26

alej

Re : [résolu] Calculer nombre de ligne par rapport à la position valeur

Il en a même + big_smile

Hors ligne

#10 Le 11/06/2010, à 23:58

alex2423

Re : [résolu] Calculer nombre de ligne par rapport à la position valeur

alej a écrit :

« Print Line Number

An equal sign ( = ) following an address prints the line number of the matched line »

(source : sed & awk, Second Edition by Dale Dougherty and Arnold Robbins © 1997, 1990 O'Reilly & Associates, Inc. - page 95)

Je pensais que le -n avait un rapport avec le numéro de ligne sad
mais en regardant le man, l'option permet de supprimer les espaces blanc à l'affichage. Bref rien à voire avec le numéro de ligne.....

(=), il y a très très peu de chance que je m'en souvienne un jour. Il n'y a pas de mémotechnique pour se souvenir.

Bref, je préfère le coup du grep -n que l'on peut cutter si l'on souhaite récupérer uniquement le numéro de ligne

grep -n monfichier | cut -d ":" -f 1

Il y a tellement de truc à retenir que je préfère un tri dans ma tête big_smile

En tout cas merci pour toutes ces explications....

Hors ligne

#11 Le 12/06/2010, à 00:24

alej

Re : [résolu] Calculer nombre de ligne par rapport à la position valeur

alex2423 a écrit :

Je pensais que le -n avait un rapport avec le numéro de ligne mais en regardant le man, l'option permet de supprimer les espaces blanc à l'affichage

On va pas faire le réveillon big_smile dans un fil qui est marqué résolu par son auteur depuis 5 ou 6 posts mais t'as regardé un peu vite...

Hors ligne

#12 Le 12/06/2010, à 22:23

wido

Re : [résolu] Calculer nombre de ligne par rapport à la position valeur

On peut continuer à poster sur ce sujet smile , ça permet d'une part de connaître d'autre commande offrant le même résultat et d'autre part de confronter ces idées roll

Dernière modification par wido (Le 12/06/2010, à 22:24)

Hors ligne

#13 Le 13/06/2010, à 07:12

credenhill

Re : [résolu] Calculer nombre de ligne par rapport à la position valeur

hello
avec awk
- si la ligne contient 129
- si le dernier champ contient 129
- si le dernier champ est égal à 129 (chaine de caractère)
- si le dernier champ == 129 (numérique)

$ cat a1
==> Found audio stream: 132
==> Found audio stream: 131
==> Found audio stream: 130
==> Found audio stream: 129
==> Found audio stream: 128
$ 
$ awk '/129/ {print NR}' a1
4
$ 
$ awk '$NF ~ /129/ {print NR}' a1
4
$ 
$ awk '$NF ~ /^129$/ {print NR}' a1
4
$ 
$ awk '$NF == 129 {print NR}' a1
4
$

Hors ligne

#14 Le 14/06/2010, à 09:43

Totor

Re : [résolu] Calculer nombre de ligne par rapport à la position valeur

credenhill a écrit :

[...]
- si le dernier champ est égal à 129 (chaine de caractère)

[...]
$ awk '$NF ~ /^129$/ {print NR}' a1
4

Dans ce cas précis, il n'est pas utile d'utiliser une ER(E) puisque la valeur à rechercher est connue dans sa totalité. On peut donc utiliser ta dernière forme avec l'emploi des guillemets puisqu'il s'agit d'une chaine de caractère.

$ awk '$NF == "129" {print NR}' a1

-- Lucid Lynx --

Hors ligne

Haut de page ↑