Pages : 1
#1 Le 21/02/2016, à 20:03
- psylo24
[Résolu] probléme avec sed
Bonsoir tout le monde,
J'aimerais que à partir d'un fichier donné (voir ci dessous) ca me supprime les espaces et que ca me les remplace par un retour chariot mais le probléme c"est que la longueur des espace est différente donc ca me créé trop de retour chariot , je m'en explique :
Fichier source :
3550 1600 550 350 500 1200
500 400 500 350 500 350
500 350 500 400 500 350
500 350 500 400 450 400
500 350 500 350 500 1250
500 350 500 400 450 400
450 400 500 350 500 400
450 400 500 1250 450 1250
500 1250 450 400 450 400
500 1250 450 400 500 350
500 400 450 400 450 400
500 400 450 400 450 400
500 350 500 400 450 400
450 400 500 400 450 400
450 400 450 400 500 400
450 400 450 400 500 400
450 400 450 400 450 400
500 400 450 400 450 400
450 450 450 400 450 400
450 400 500 1250 450 1300
450 400 450 400 450 400
450 450 450 400 450 9950
3450 1700 450 400 450 1300
450 400 450 450 450 400
450 400 450 450 400 450
450 400 450 400 450 450
450 400 450 400 450 1300
450 400 450 400 450 450
450 400 450 400 450 450
400 450 450 1250 450 1300
450 1300 400 450 450 400
450 1300 450 400 450 400
450 450 400 450 450 400
450 400 450 450 450 400
450 400 450 450 400 450
450 400 450 400 450 1300
450 400 450 450 400 1300
450 400 450 450 450 400
450 400 450 450 400 1300
450 400 450 450 450 400
450 1300 400 450 450 400
450 400 450 450 450 400
450 400 450 450 400 450
450 400 450 1300 450 400
450 1300 400 450 450 400
450 450 400 1300 450 400
450 1300 450 400 450 450
400 1300 450 1300 400 450
450 400 450 450 400 450
450 400 450 400 450 450
400 450 450 400 450 450
400 450 450 400 450 400
450 1300 450 1300 400 1300
450 400 450 450 400 450
450 400 450 450 400 450
450 400 450 400 450 450
400 1300 450 1300 450 1250
450 450 400 450 450 400
450 450 400 450 450 400
450 400 450 450 400 450
450 400 450 450 400 450
450 400 450 450 400 450
400 450 450 1300 400 450
450 400 450 450 400 450
400 450 450 400 450 1300
450 400 450 450 400 450
400 450 450 400 450 450
400 450 450 400 450 450
400 450 400 450 450 400
450 450 400 450 450 400
450 450 400 450 400 1300
450 1300 450 1300 400 450
400 450 450 1300 400 1300
450
Quand je fais un "sed -e "s/ /\n/g" < a"
Ça me retourne en partie : (pour l'exemple)
450
450
400
450
400
450
450
400
450
450
400
450
450
400
450
450
400
450
400 1300
450 1300
450 1300
400
450
400
450
450 1300
400 1300
450
or je voudrais avoir un chiffre par ligne et donc aucun espace par exemple :
450
450
450
500
1300
....
Merci par avance pour votre aide
Dernière modification par psylo24 (Le 21/02/2016, à 21:16)
Hors ligne
#2 Le 21/02/2016, à 20:20
- pingouinux
Re : [Résolu] probléme avec sed
Bonsoir,
Par exemple
printf "%s\n" $(cat fichier)
Ajouté :
Ou bien
$ sed "s/ \+/\n/g" fichier | sed "/^$/d"
Dernière modification par pingouinux (Le 21/02/2016, à 20:26)
Hors ligne
#3 Le 21/02/2016, à 20:39
- psylo24
Re : [Résolu] probléme avec sed
en fait mon fichier source je l’obtient avec la commande "mode2 -d /dev/lirc0 -m", et je voudrais en fait que ca me formate directement le fichier, par exemple :
sudo mode2 -d /dev/lirc0 -m | sed -e "s/ /\n/g" | sed "/^$/d"
mais quand je fais ca je suis obligé d'appuyer 2 fois sur le bouton de ma télécommande pour avoir un résultat, du coup ca me retourne 2 captures.
or si je fais
sudo mode2 -d /dev/lirc0 -m | sed -e "s/ /\n/g"
un seul appuie de bouton fonctionne mais j'ai des lignes vides
Dernière modification par psylo24 (Le 21/02/2016, à 20:44)
Hors ligne
#4 Le 21/02/2016, à 20:53
- pingouinux
Re : [Résolu] probléme avec sed
Dans ce cas, ceci devrait marcher :
sudo mode2 -d /dev/lirc0 -m | sed "s/ \+/\n/g" | sed "/^$/d"
Ajouté : Je n'ai vu l'édition du #3 qu'après avoir écrit ma réponse. Je ne comprends pas ton histoire de télécommande.
Dernière modification par pingouinux (Le 21/02/2016, à 20:59)
Hors ligne
#5 Le 21/02/2016, à 20:56
- helias
Re : [Résolu] probléme avec sed
Bonjour Psylo24,
Excuse moi d'avance je n'ai pas beaucoup de temps pour te répondre, je proposerais donc une ligne de code vraiment pas abouti.
Pour ce qui est de virer les espaces et les lignes vides, tu as la commande " N et D " qui sont la pour ça
par exemple :
cat monfichier| sed -e 's/ /\n/g' | sed -re '/^$/ {N;D}'
ce qui devrais faire plus ou moins le job je pense.
Pas eu le temps de tester mais ça devrais fonctionner. Le premier sed rassemble les chiffres entre eux et met des retour a la ligne ( beaucoup ... ) donc je demande au deuxième de les virer avant et après
Tiens nous au courant pour la suite.
Hélias
Dernière modification par helias (Le 21/02/2016, à 20:59)
Hors ligne
#6 Le 21/02/2016, à 20:57
- psylo24
Re : [Résolu] probléme avec sed
Dans ce cas, ceci devrait marcher :
sudo mode2 -d /dev/lirc0 -m | sed "s/ \+/\n/g" | sed "/^$/d"
Merci mais non car là je suis obligé d'appuyer 3 fois sur le bouton
Hors ligne
#7 Le 21/02/2016, à 21:02
- psylo24
Re : [Résolu] probléme avec sed
Bon pour reprender à 0, ma commande mod2 me retourne exactement :
3849041
450 989989
3550 1650 500 350 500 1250
500 350 500 350 500 400
500 350 500 350 500 350
500 400 500 350 500 350
500 400 450 400 500 1200
500 400 450 400 500 350
500 400 450 400 450 400
500 350 500 1250 500 1250
450 1250 500 350 500 400
450 1250 500 400 450 400
450 400 500 350 500 400
450 400 450 400 500 400
450 400 450 400 500 350
500 400 450 400 450 400
500 400 450 400 450 400
450 400 500 400 450 400
450 400 450 450 450 400
450 400 450 450 450 400
450 400 450 400 450 450
450 400 450 1300 450 1250
450 400 450 450 450 400
450 400 450 450 400 9950
3500 1700 450 400 450 1300
450 400 450 400 450 450
400 450 450 400 450 400
450 450 450 400 450 400
450 450 400 450 450 1250
450 450 450 400 450 400
450 450 400 450 450 400
450 400 450 1300 450 1300
400 1300 450 400 450 450
450 1250 450 450 400 450
450 400 450 400 450 450
450 400 450 400 450 450
400 450 450 400 450 450
400 450 450 400 450 1300
400 450 450 400 450 1300
450 400 450 400 450 450
450 400 450 400 450 1300
450 400 450 1300 450 400
450 1300 400 450 450 400
450 400 450 450 450 400
450 400 450 450 400 450
450 400 450 1300 450 400
450 1300 400 450 450 400
450 400 450 1300 450 400
450 1300 450 400 450 400
450 1300 450 1300 400 450
450 400 450 450 400 450
450 400 450 400 450 450
400 450 450 400 450 450
400 450 450 400 450 400
450 1300 450 1300 400 1300
450 400 450 450 400 450
450 400 450 450 400 450
450 400 450 400 450 450
400 1300 450 1300 450 1300
400 450 400 450 450 400
450 450 400 450 450 400
450 400 450 450 400 450
450 400 450 450 400 450
450 400 450 450 400 450
400 450 450 1300 400 450
450 400 450 450 400 450
400 450 450 400 450 1300
450 400 450 450 400 450
400 450 450 400 450 450
400 450 450 400 450 450
400 450 450 400 450 400
450 450 400 450 450 400
450 450 400 450 450 1300
400 1300 450 400 450 1300
450 400 450 1300 400 1300
Je voudrais que :
-supprimer les 4premiéres lignes
-avoir un chiffre par ligne
3500
1750
450
500
...
Hors ligne
#8 Le 21/02/2016, à 21:04
- pingouinux
Re : [Résolu] probléme avec sed
Merci mais non car là je suis obligé d'appuyer 3 fois sur le bouton
Je ne connais pas mode2 et ne vois pas ce que tu veux dire.
Sinon, tu peux toujours passer par un fichier intermédiaire.
sudo mode2 -d /dev/lirc0 -m >/tmp/provi
cat /tmp/provi | sed "s/ \+/\n/g" | sed "/^$/d"[
rm /tmp/provi
Hors ligne
#9 Le 21/02/2016, à 21:07
- pingouinux
Re : [Résolu] probléme avec sed
Pour supprimer les 4 premières lignes, en plus du reste :
sed "1,4d;s/ \+/\n/g" | sed "/^$/d"
Hors ligne
#10 Le 21/02/2016, à 21:08
- helias
Re : [Résolu] probléme avec sed
cat monfichier | sed '1,4d' | sed -e 's/ /\n/g' | sed -re '/^$/ {N;D}'
essaye en remplaçant le cat par mod2 même si je ne connais pas ça fonctionnera sûrement ?
Dernière modification par helias (Le 21/02/2016, à 21:09)
Hors ligne
#11 Le 21/02/2016, à 21:13
- psylo24
Re : [Résolu] probléme avec sed
Merci bien, le code final est
cat tt | sed '1,4d' | sed -e "s/ /\n/g" | sed '/^$/d'
mais ça ne m'arrange pas de passer par un fichier intermédiaire mais si j'ai pas le choix je vais faire avec
mode2 est un module de LIRC qui permet d'avoir le code raw (impulsions) de télécommandes infra rouge, quand tu appuis sur un bouton ca envoie des codes similaires qui correspondent aux imputions 0 et 1.
En fait je pense savoir pourquoi ca ne fonctionne pas car mode2 est en en mode 'écoute'du coup il affiche les code qu'il recoit mais le 'logiciel' ne se ferme pas donc ca n'arrive pas à traiter les données derrières, il faut que je fasse un 'sudo mode2 -d /dev/lirc0 -m > temp' puis que je modifie le fichier temp.
Il ne me reste plus qu'à faire un script pour automatiser tout ca.
Encore merci à vous pour votre efficacité
Dernière modification par psylo24 (Le 21/02/2016, à 21:15)
Hors ligne