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 15/12/2009, à 10:35

Hizoka

(résolu) Texte entre 2 occurrences

Bonjour,

Soit le texte suivant (nombre de ligne entre les # jamais fixe) :

   Accueil | Top 30 | En Images! | Derniers facts | Moderez! | Proposer | FAQ                     
   | Contact |                                                                                    
   _____________________ [ OK ]                                                                   
   Type de parcours : Top Points - Flop points - Top Moyenne - Flop Moyenne -                     
   Aleatoire - Derniers ajouts                                                                    
   #2043     417 / 8.26     (+++) (++) (+) (Berk)                                                 
   Quand un avion s'ecrase ,c'est parce que Chuck Norris l'a lance trop fort.                     
   #61038     3086 / 7.93     (+++) (++) (+) (Berk)                                               
   Quand Chuck Norris est sur l'ordinateur, il n'affiche jamais "Ce programme                     
   ne repond pas". On ne snobe pas Chuck Norris.                                                  
   #40864     1366 / 7.93     (+++) (++) (+) (Berk)                                               
   Contrairement `a Dieu, on ne tutoie pas Chuck Norris.

J'arrive pas à afficher le texte se trouvant entre les 2 premiers #.

avec la commande

sed -n '/#/,/#/p'

il m'affiche tout entre le 1er et dernier #

j'ai beau chercher, je ne trouve pas de commande qui me convienne...

Si vous avez une idée, merci de l'indiquer smile

Sinon il faudrait réussir à lui dire ne pas sauter de ligne entre les lignes contenant un #

Mon but est d'obtenir le texte entre les lignes avec un # en une seule ligne.
Exemple :

Quand Chuck Norris est sur l'ordinateur, il n'affiche jamais "Ce programme  ne repond pas". On ne snobe pas Chuck Norris.

Dernière modification par Hizoka (Le 15/12/2009, à 11:52)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#2 Le 15/12/2009, à 10:47

seb0uil

Re : (résolu) Texte entre 2 occurrences

Salut,
entre les 2 premiers # c'est

2043     417 / 8.26     (+++) (++) (+) (Berk)                                                 
   Quand un avion s'ecrase ,c'est parce que Chuck Norris l'a lance trop fort.

c'est ca que tu veux, ou juste les lignes sans # ?
Dans ce cas un grep -v "^#" pourrait suffire non ?


Java stuff ::
tPortal.. ma petite implémentation de la JSR168
jlibParam.. pooling, paramétrage etc...

Hors ligne

#3 Le 15/12/2009, à 11:03

Hizoka

Re : (résolu) Texte entre 2 occurrences

je veux : "Quand un avion s'ecrase ,c'est parce que Chuck Norris l'a lance trop fort." dans l'exemple.

c'est à dire le texte entre la 1ere ligne contenant un # et la 2éme.

mais si tu arrives à m'obtenir comme dans ton exemple :

2043     417 / 8.26     (+++) (++) (+) (Berk)                                                 
   Quand un avion s'ecrase ,c'est parce que Chuck Norris l'a lance trop fort.

ca m'aiderait surement...

EDIT : J'ai trouvé une bonne commande là :

sed -n '/#/,/#/{//d;p}'

Ca m'affiche tous les textes entre les lignes contenant # sans ses lignes.

Dernière modification par Hizoka (Le 15/12/2009, à 11:24)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 15/12/2009, à 11:24

seb0uil

Re : (résolu) Texte entre 2 occurrences

Si le nombre de ligne de l'entête est fixe , tu peux essayer avec

$ more chuck.txt
Accueil | Top 30 | En Images! | Derniers facts | Moderez! | Proposer | FAQ
| Contact |
_____________________ [ OK ]
Type de parcours : Top Points - Flop points - Top Moyenne - Flop Moyenne -
Aleatoire - Derniers ajouts
#2043     417 / 8.26     (+++) (++) (+) (Berk)
Quand un avion s'ecrase ,c'est parce que Chuck Norris l'a lance trop fort.
#61038     3086 / 7.93     (+++) (++) (+) (Berk)
Quand Chuck Norris est sur l'ordinateur, il n'affiche jamais "Ce programme ne re
pond pas". On ne snobe pas Chuck Norris.
#40864     1366 / 7.93     (+++) (++) (+) (Berk)
#
#
Contrairement `a Dieu, on ne tutoie pas Chuck Norris.


$ grep -v "^#" chuck.txt  |tail +5
Aleatoire - Derniers ajouts
Quand un avion s'ecrase ,c'est parce que Chuck Norris l'a lance trop fort.
Quand Chuck Norris est sur l'ordinateur, il n'affiche jamais "Ce programme ne re
pond pas". On ne snobe pas Chuck Norris.
Contrairement `a Dieu, on ne tutoie pas Chuck Norris.

Java stuff ::
tPortal.. ma petite implémentation de la JSR168
jlibParam.. pooling, paramétrage etc...

Hors ligne

#5 Le 15/12/2009, à 11:27

Hizoka

Re : (résolu) Texte entre 2 occurrences

ouais mais ça répond pas du tout à ce que je veux :)

par exemple :
#61038     3086 / 7.93     (+++) (++) (+) (Berk)
Quand Chuck Norris est sur l'ordinateur, il n'affiche jamais "Ce programme ne re
pond pas". On ne snobe pas Chuck Norris.
#40864     1366 / 7.93     (+++) (++) (+) (Berk)

et je veux :

Quand Chuck Norris est sur l'ordinateur, il n'affiche jamais "Ce programme ne re pond pas". On ne snobe pas Chuck Norris.

là j'arrive à récupérer le texte entre les # donc :

Quand Chuck Norris est sur l'ordinateur, il n'affiche jamais "Ce programme ne re
pond pas". On ne snobe pas Chuck Norris.

me reste à lui dire de supprimer les retour chariots sur les lignes ne se terminant pas par un point.

Pour le moment j'en suis là :

links -dump 'http://www.chucknorrisfacts.fr/index.php?p=parcourir&tri=aleatoire' | sed -n '/#/,/#/{//d;p}' | sed 's/^ *//g ; s/`//g' | sed -n '1,/\.$/p'

qui me donne quelque chose comme :

Chuck Norris peut demontrer les axiomes.
Dans n'importe quel episode de Final Fantasy, un personnage baptise "Chuck
Norris" aura d'emblee toutes les caracteristiques a 255 et toutes les
invocations.

Il faut que j'arrive à trouver une solution pour qu'il s'arrete au 1er point meme si il se trouve sur la 1ere ligne ou comment lui dire de ne pas sauter une ligne quand la phrase est en 2 lignes.

Dernière modification par Hizoka (Le 15/12/2009, à 11:48)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#6 Le 15/12/2009, à 11:47

Totor

Re : (résolu) Texte entre 2 occurrences

Bonjour,

pour récupérer la 2nde occurence :

links -dump 'http://www.chucknorrisfacts.fr/index.php?p=parcourir&tri=aleatoire'|awk -v OCC=2 'BEGIN{ RS="#" } NR==OCC'

Tu auras compris qu'il suffit de changer la valeur de OCC pour avoir la Nième...


-- Lucid Lynx --

Hors ligne

#7 Le 15/12/2009, à 11:50

Hizoka

Re : (résolu) Texte entre 2 occurrences

bouhouhou.... je passe 3 plombs (vraiment 3 heures en plus...) là dessus et pis Totor il arrive et en 10sec, pouf c'est réglé !!

hizoka@pc-hizo:~$ links -dump 'http://www.chucknorrisfacts.fr/index.php?p=parcourir&tri=aleatoire'|awk -v OCC=2 'BEGIN{ RS="#" } NR==OCC' | sed '1d ; s/^ *//g ; /^$/d'
Chuck Norris s'est entraine avec Maitre Miaggi de karatekid

Merci beaucoup à toi !!!

il faut vraiment que je m'y mette à awk mais c'est franchement pas super simple...
t'as un bon tuto pour awk ?

Dernière modification par Hizoka (Le 15/12/2009, à 11:51)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#8 Le 15/12/2009, à 12:01

Totor

Re : (résolu) Texte entre 2 occurrences

Hizoka a écrit :

t'as un bon tuto pour awk ?

J'ai appris awk avec ce guide (dédié au ksh) en page 94. Mais cela fait 2 ans que je n'y ai pas mis le nez car depuis que j'ai compris la philosophie, je n'utilise que le man et parfois ce site


-- Lucid Lynx --

Hors ligne

#9 Le 15/12/2009, à 22:46

Totor

Re : (résolu) Texte entre 2 occurrences

Bonsoir,

Je n'avais pas fait attention que tu voulais supprimer la 1ère ligne d'une occurence ainsi que les blancs en début de ligne. Par ailleurs, le simple caractère "#" comme séparateur ne suffit pas car il peut être présent  dans le texte. Alors voilà une solution full awk :

links -dump 'http://www.chucknorrisfacts.fr/index.php?p=parcourir&tri=aleatoire'|awk -v OCC=2 'BEGIN {RS="\n[[:blank:]]*#[^\n]+\n"} NR==OCC { texte=gensub(/(^|\n)[[:blank:]]+/,"\\1","g"); print texte}'

-- Lucid Lynx --

Hors ligne

#10 Le 15/12/2009, à 23:09

Hizoka

Re : (résolu) Texte entre 2 occurrences

awk: line 2: function gensub never defined

mais tout ce que je veux c'est virer les blancs devant les textes et afficher le texte entre 2 # (que ce soit la 2éme ou autre on s'en fiche), du coup
- je supprime la 1ere ligne : 78171     2486 / 8.33     (+++) (++) (+) (Berk)
- je supprime les espaces de début
- je supprime la ligne vide se trouvant juste avant la ligne ayant #

Je n'ai trouvé aucun # dans les textes, donc pas de problème.

Dernière modification par Hizoka (Le 15/12/2009, à 23:10)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#11 Le 16/12/2009, à 00:37

Totor

Re : (résolu) Texte entre 2 occurrences

Hizoka a écrit :
awk: line 2: function gensub never defined

utilise gawk


-- Lucid Lynx --

Hors ligne

#12 Le 16/12/2009, à 00:39

Hizoka

Re : (résolu) Texte entre 2 occurrences

arg encore un paquet... tant pis ma solution me convient smile

sinon je veux bien ton aide pour ça : http://forum.ubuntu-fr.org/viewtopic.php?id=366125


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#13 Le 16/12/2009, à 08:28

Totor

Re : (résolu) Texte entre 2 occurrences

Hizoka a écrit :

arg encore un paquet...

Étrange, normalement il est par défaut installé hmm

EDIT : Utilise RS="\n[[:blank:]]*#[^\n]+\n" plutôt que RS="#" pour supprimer la 1ere ligne et remplace texte=gensub(/(^|\n)[[:blank:]]+/,"\\1","g"); print texte par
gsub(/^[[:blank:]]+/, ""); gsub(/\n[[:blank:]]+/,"\n"); print pour supprimer les blancs en début de ligne. Cela t'évitera d'utiliser sed

Dernière modification par Totor (Le 16/12/2009, à 14:55)


-- Lucid Lynx --

Hors ligne

#14 Le 16/12/2009, à 18:44

Hizoka

Re : (résolu) Texte entre 2 occurrences

links -dump 'http://www.chucknorrisfacts.fr/index.php?p=parcourir&tri=aleatoire'|awk -v OCC=2 'BEGIN {RS="\n[[:blank:]]*#[^\n]+\n"} NR==OCC { gsub(/^[[:blank:]]+/, ""); gsub(/\n[[:blank:]]+/,"\n"); print}'

Si j'ai bien compris ça donne ça, mais je n'ai aucun retour.

un :

links -dump 'http://www.chucknorrisfacts.fr/index.php?p=parcourir&tri=aleatoire'|awk -v OCC=2 'BEGIN{ RS="\n[[:blank:]]*#[^\n]+\n"} NR==OCC'

ne me renvoi deja rien.

donc ça doit venir de : RS="\n[[:blank:]]*#[^\n]+\n"

Je suis sous kde donc c'est peut-être pour ça que je n'ai pas gawk.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#15 Le 16/12/2009, à 18:59

Totor

Re : (résolu) Texte entre 2 occurrences

Oui, c'est certainement awk (que je n'ai pas sur mon poste).
Mais c'est vraiment étrange que tu n'aies pas gawk d'installer par défaut hmm

que te donne :

ls -l /etc/alternatives/*awk


-- Lucid Lynx --

Hors ligne

#16 Le 16/12/2009, à 19:07

Hizoka

Re : (résolu) Texte entre 2 occurrences

lrwxrwxrwx 1 root root 13 2009-12-13 09:23 /etc/alternatives/awk -> /usr/bin/mawk
lrwxrwxrwx 1 root root 13 2009-12-13 09:23 /etc/alternatives/nawk -> /usr/bin/mawk


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#17 Le 16/12/2009, à 21:38

Totor

Re : (résolu) Texte entre 2 occurrences

Alors voilà :

links -dump 'http://www.chucknorrisfacts.fr/index.php?p=parcourir&tri=aleatoire'|awk -v OCC=2 'BEGIN {RS="\n *#[^\n]+\n"} NR==OCC { gsub(/^ +/, ""); gsub(/\n +/,"\n"); print}'

mawk ne reconnait pas [[:blank:]], je l'ai donc remplacé par un simple espace et c'est ok.


-- Lucid Lynx --

Hors ligne

#18 Le 17/12/2009, à 09:08

Hizoka

Re : (résolu) Texte entre 2 occurrences

peux tu me donner la commande pour effacer les ` qui se trouvent dans les textes des fois.

ca me permettrait de voir un peu comment on peut utiliser awk pour un simple remplacement de caractère

sinon, merci ça marche smile.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#19 Le 17/12/2009, à 11:12

Totor

Re : (résolu) Texte entre 2 occurrences

Pour supprimer un caractère, utilise gsub :

gsub(/`/, "", <nomvariable>)

La modification s'effectue directement dans la variable.
1er paramètre : permet de préciser l'ERE (donc ici /`/ = uniquement le caractère `
2nd paramètre : chaine de remplacement (ici = "" = vide)
3eme paramètre : variable dans laquelle la recherche doit être effectuée. Ce paramètre est optionnel et s'il est homis, ce sera l'enregistrement courant qui sera utilisé.

(Par défaut, un enregistrement est une ligne du fichier. tu peux changer le délimiteur d'enregistrement via la variable RS : cf. script)


-- Lucid Lynx --

Hors ligne