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 17/06/2013, à 19:58

Hizoka

[resolu] Travailler sur des bloc avec awk/sed

Bonsoir,

je suis encore a essayé d'utiliser UNE comande awk ou sed mais je n'y arrive malheureusement pas...

je traite une liste d'info et j'arrive a ce resultat :

asura
Asura
Comédie, Romance, Surnaturel, Drame
Shôjo
8.87
4
3
--
attaque
Attaque
Drame, Sport, Vie Scolaire
Shônen
6.85
1
1
--
ayahatorishoukanjou
Ayahatori Shoukanjou
Comédie, Drame, Fantastique, Historique, Romance
Shônen
8.3
11
10
--
ayakashihisen
Ayakashi Hisen
Romance, Surnaturel
Shôjo
8.57
8
8

mon but est d'arrivé à :

asura | Asura | Comédie, Romance, Surnaturel, Drame | Shôjo | 8.87 | 4 | 3
attaque | Attaque | Drame, Sport, Vie Scolaire | Shônen | 6.85 | 1 | 1
ayahatorishoukanjou | Ayahatori Shoukanjou | Comédie, Drame, Fantastique, Historique, Romance | Shônen | 8.3 | 11 | 10
ayakashihisen | Ayakashi Hisen | Romance, Surnaturel | Shôjo | 8.57 | 8 | 8

donc remplacer les sauts de lignes par des " | " si les lignes sont différentes de --


j'y arrive en passant par de multiple sed :

sed ':z;N;s/\n/ | /;bz' | sed 's@ | -- | @\n@g'

ou avec tr :

tr "\n" "|" | sed 's/|--|/\n/g ; s/|/ | /g ; $s/ | $/\n/'

Ma liste a traiter étant tres lourde, plus la commande sera simple et rapide mieux cela sera smile


Avec une question bonus que awk efface les blocs ayant moins de 7 lignes

ayahatorishoukanjou
Ayahatori Shoukanjou
Comédie, Drame, Fantastique, Historique, Romance
Shônen
8.3
10

merci à vous !

Dernière modification par Hizoka (Le 17/06/2013, à 21:07)


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

Hors ligne

#2 Le 17/06/2013, à 20:09

Spitfire 95

Re : [resolu] Travailler sur des bloc avec awk/sed

Je fais que le bonus :

awk 'length($_)>6 {print $0}'

Pour la suite je verrai bien xargs pour ça... Je regarde le man voir si je trouve une piste

J'y serais presque avec xargs mais ça reste bordélique

[nux@fedora ~]$ cat test |xargs -I {} echo {}' | ' | xargs
ayahatorishoukanjou | Ayahatori Shoukanjou | Comédie, Drame, Fantastique, Historique, Romance | Shônen | 8.3 | 10 |

Je comprend pas pourquoi il me met aussi le | à la dernière ligne là...

[nux@fedora ~]$ export f=file 
[nux@fedora ~]$ awk 'length($_)>6 {print $0}' $f |xargs -L $((`awk 'length($_)>6 {print $0}' $f | wc -l  | cut -d" " -f1` -1)) -I {} echo {}' | ' |xargs
ayahatorishoukanjou | Ayahatori Shoukanjou | Comédie, Drame, Fantastique, Historique, Romance |

Dernière modification par Spitfire 95 (Le 17/06/2013, à 20:30)


Trisquel GNU/Linux 6.0 / Fedora 19 & rawhide.
joueur ryzom et wesnoth
Développeur livewallpaper
Membre déserteur et traître de la brigade des S.

Hors ligne

#3 Le 17/06/2013, à 20:19

Hizoka

Re : [resolu] Travailler sur des bloc avec awk/sed

ca complique plus qu'autre chose la smile

mon but est de simplifier ma commande afin de peut etre gagner un peu de temps et de clarté.


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

Hors ligne

#4 Le 17/06/2013, à 20:25

Spitfire 95

Re : [resolu] Travailler sur des bloc avec awk/sed

Personnellement jtrouve ça toujours plus clair qu'un sed ^^'
Par contre la commande n'est pas assez compliquée, j'ai compris pour la dernière ligne, je prend le nombre de ligne -1 de l'original, pas de la version sans les petites lignes

Dernière modification par Spitfire 95 (Le 17/06/2013, à 20:29)


Trisquel GNU/Linux 6.0 / Fedora 19 & rawhide.
joueur ryzom et wesnoth
Développeur livewallpaper
Membre déserteur et traître de la brigade des S.

Hors ligne

#5 Le 17/06/2013, à 20:29

Hizoka

Re : [resolu] Travailler sur des bloc avec awk/sed

ouais mais faut voir la commande entiere tongue

wget -qO - "http://www.lecture-en-ligne.com/index.php?page=liste&ordre=titre&p=1" | grep -A 7 "tr onmouseover" | sed '1d ; /N\/A/ s@.*@N/A@ ; s@[^>]*>@@ ; s@</.*@@ ; /^<a href/ s@.*manga/\(.*\)/".*>\(.*\)@\1\n\2@ ; /)$/ s@ (\(.*\))@\n\1@ ; /fois$/d ; /^$/d ; s@^Ch. @@ ; s/&/&amp;/g'

plus ce que je demande tongue


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

Hors ligne

#6 Le 17/06/2013, à 20:32

Spitfire 95

Re : [resolu] Travailler sur des bloc avec awk/sed

Une fois simplifié :

awk 'length($_)>6 {print $0 " |"}' test |xargs

Dernière modification par Spitfire 95 (Le 17/06/2013, à 20:52)


Trisquel GNU/Linux 6.0 / Fedora 19 & rawhide.
joueur ryzom et wesnoth
Développeur livewallpaper
Membre déserteur et traître de la brigade des S.

Hors ligne

#7 Le 17/06/2013, à 20:35

pingouinux

Re : [resolu] Travailler sur des bloc avec awk/sed

Bonsoir,

awk 'BEGIN{RS="\n--\n";FS="\n";OFS=" | "}NF>6{$1=$1;print}' fichier

Résultat

asura | Asura | Comédie, Romance, Surnaturel, Drame | Shôjo | 8.87 | 4 | 3
attaque | Attaque | Drame, Sport, Vie Scolaire | Shônen | 6.85 | 1 | 1
ayahatorishoukanjou | Ayahatori Shoukanjou | Comédie, Drame, Fantastique, Historique, Romance | Shônen | 8.3 | 11 | 10
ayakashihisen | Ayakashi Hisen | Romance, Surnaturel | Shôjo | 8.57 | 8 | 8 |

Et pour ne pas avoir le | à la fin de la dernière ligne, il faut ajouter la fin de bloc -- en fin du fichier.

Hors ligne

#8 Le 17/06/2013, à 20:35

Spitfire 95

Re : [resolu] Travailler sur des bloc avec awk/sed

awk 'length($_)>6 {printf " %s |",$0}' file | sed 's/.$//'

Et en prenant ton texte de la première balise code du topic j'obtiens :

Comédie, Romance, Surnaturel, Drame | attaque | Attaque | Drame, Sport, Vie Scolaire | ayahatorishoukanjou | Ayahatori Shoukanjou | Comédie, Drame, Fantastique, Historique, Romance | ayakashihisen | Ayakashi Hisen | Romance, Surnaturel 

Dernière modification par Spitfire 95 (Le 17/06/2013, à 20:52)


Trisquel GNU/Linux 6.0 / Fedora 19 & rawhide.
joueur ryzom et wesnoth
Développeur livewallpaper
Membre déserteur et traître de la brigade des S.

Hors ligne

#9 Le 17/06/2013, à 20:43

Watael

Re : [resolu] Travailler sur des bloc avec awk/sed

salut,

$ awk 'BEGIN{RS="--"; FS="\n"}NF>6{for(i=1;i<NF;i++)line=line?line" | "$i:$i; print line; line=""}' fichier
asura | Asura | Comédie, Romance, Surnaturel, Drame | Shôjo | 8.87 | 4 | 3
attaque | Attaque | Drame, Sport, Vie Scolaire | Shônen | 6.85 | 1 | 1
ayahatorishoukanjou | Ayahatori Shoukanjou | Comédie, Drame, Fantastique, Historique, Romance | Shônen | 8.3 | 11 | 10
ayakashihisen | Ayakashi Hisen | Romance, Surnaturel | Shôjo | 8.57 | 8 | 8

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 17/06/2013, à 21:07

Hizoka

Re : [resolu] Travailler sur des bloc avec awk/sed

Merci à vous,

je vais prendre la version de pingouinux car elle est plus rapide que celle de watael et en plus elle prend en compte ma demande bonus tongue

et hop, resolu !


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

Hors ligne

#11 Le 17/06/2013, à 21:23

Spitfire 95

Re : [resolu] Travailler sur des bloc avec awk/sed

Oups je viens de comprendre que je n'avais pas compris la demande bonus correctement ^^'


Trisquel GNU/Linux 6.0 / Fedora 19 & rawhide.
joueur ryzom et wesnoth
Développeur livewallpaper
Membre déserteur et traître de la brigade des S.

Hors ligne

#12 Le 18/06/2013, à 07:04

pingouinux

Re : [resolu] Travailler sur des bloc avec awk/sed

Et voici une version en python :

#! /usr/bin/python
# -*- coding: utf-8 -*-

with open('ficher','r') as fic :
   for bloc in fic.read().split('--\n') : 
      ligs=bloc.splitlines()
      if len(ligs)>6 : print(' | '.join(ligs))

Hors ligne