#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
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
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
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/&/&/g'
plus ce que je demande
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
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