Pages : 1
#1 Le 12/01/2006, à 18:43
- bobousse
traitement de fichier texte
voila donc encore moi et toujours pour le meme script
en fait j'ai récupéré les valeurs des débits de download et il faut que je remplace les points par des virgules (ex: 6.95) car je veux utiliser gnuplot et celui-ci n'accepte pas les points
l'autre problème, c'est que gnuplot veut bien tracer une courbe mais si il a deux séries de données il faudrait donc que j'arrive à renuméroter les lignes dans le fichier
et tou cela en ligne de commande biensur
pour les points et les virgules j ai déjà essayé un sed -i "s/./,/g" mais il a remplacé tous les caractères par des virgules bref je n'y comprend plu rien
donc si quelqu'un est un pro du bash ce serait sympa qu'il m'aide
lerci d'avance @+
Hors ligne
#2 Le 12/01/2006, à 18:45
- bobousse
Re : traitement de fichier texte
a oui il faut aussi que j'arrive à afficher l'avant derniere ligne d'un fichier texte 'la dernière ca aurait été bien mais elle est vide)
et puis voir pour afficher les lignes à suivre mais en partant du bas
Hors ligne
#3 Le 12/01/2006, à 22:38
- LaTheix
Re : traitement de fichier texte
en fait j'ai récupéré les valeurs des débits de download et il faut que je remplace les points par des virgules (ex: 6.95) car je veux utiliser gnuplot et celui-ci n'accepte pas les points
exemple de fichier: (on l'appellera essai)
toto.1
toto.2
toto.3
toto.4
toto.5
sed 's/\./,/g' < essai
toto,1
toto,2
toto,3
toto,4
toto,5
l'autre problème, c'est que gnuplot veut bien tracer une courbe mais si il a deux séries de données il faudrait donc que j'arrive à renuméroter les lignes dans le fichier
nl essai
1 toto.1
2 toto.2
3 toto.3
4 toto.4
5 toto.5
On peut modifier les options pour améliorer la sortie (man nl pour + d'infos)
nl -w2 -s ' - ' essai
1 - toto.1
2 - toto.2
3 - toto.3
4 - toto.4
5 - toto.5
a oui il faut aussi que j'arrive à afficher l'avant derniere ligne d'un fichier texte 'la dernière ca aurait été bien mais elle est vide)
Pour atteindre l'avant dernière ligne :
nb_lignes=`wc -l essai` # ------------- >(nb_lignes = 5)
ligne=$(($nb_lignes - 1)) # ------------->(ligne = 4)
head -n $ligne |tail -1 # -------------->(affiche toto.4)
Tu peux aussi virer la dernière ligne de ton fichier
sed '5d' essai
et puis voir pour afficher les lignes à suivre mais en partant du bas
Je suppose que tu veux lire un fichier en partant de la fin ? Si c'est le cas, :
tac essai
toto.5
toto.4
toto.3
toto.2
toto.1
tac fait l'inverse de cat ...
Hors ligne
#4 Le 13/01/2006, à 11:45
- bobousse
Re : traitement de fichier texte
merci beaucoup de ta réponse LaTheix
j'ai encore une autre petite question,
comment peut-on afficher une ligne d'un fichier et ce en choisissant la ligne à afficher
Hors ligne
#5 Le 13/01/2006, à 12:32
- bobousse
Re : traitement de fichier texte
c'est bon pour la ligne mais maintenant j'ai un problème de syntaxe avec zenity ----au secours----:mad::mad:
j'ai ce code là
sudo tac /var/log/vsftpd.log | grep "OK LOGIN" | cut -c1-25 > /home/bobousse/scripts_sh/datcox.txt
sudo tac /var/log/vsftpd.log | grep "OK LOGIN" | cut -c26- | cut -d" " -f3 > /home/bobousse/scripts_sh/user.txt
date=($(cat datcox.txt))
user=($(cat user.txt))
DATE1=`echo "${date[1]} ${date[2]} ${date[3]} ${date[4]} ${date[5]}"`
USER1=`echo "${user[1]} ${user[2]} ${user[3]} ${user[4]} ${user[5]}"`
DATE2=`echo "${date[6]} ${date[7]} ${date[8]} ${date[9]} ${date[10]}"`
USER2=`echo "${user[6]} ${user[7]} ${user[8]} ${user[9]} ${user[10]}"`
DATE3=`echo "${date[11]} ${date[12]} ${date[13]} ${date[14]} ${date[15]}"`
USER3=`echo "${user[11]} ${user[12]} ${user[13]} ${user[14]} ${user[15]}"`
DATE4=`echo "${date[16]} ${date[17]} ${date[18]} ${date[19]} ${date[20]}"`
USER4=`echo "${user[16]} ${user[17]} ${user[18]} ${user[19]} ${user[20]}"`
DATE5=`echo "${date[21]} ${date[22]} ${date[23]} ${date[24]} ${date[25]}"`
USER5=`echo "${user[21]} ${user[22]} ${user[23]} ${user[24]} ${user[25]}"`
download=("${download[@]}" "$DATE1" "$USER1")
download=("${download[@]}" "$DATE2" "$USER2")
download=("${download[@]}" "$DATE3" "$USER3")
download=("${download[@]}" "$DATE4" "$USER4")
download=("${download[@]}" "$DATE5" "$USER5")
`zenity --list --title="$TITLE2" --column "Date" --column "Utilisateur" "${download[@]}"`
et je viens de me rendre compte qu'il n'arrivait pas à afficher mes variables DATEx et USERx et je n'arrive pas à trouver l'erreur donc voilà le problème
Hors ligne
#6 Le 13/01/2006, à 12:37
- bobousse
Re : traitement de fichier texte
en fait je vien de me rendre compte que le problème venais des deux lignes
sudo tac /var/log/vsftpd.log | grep "OK LOGIN" | cut -c1-25 > /home/bobousse/scripts_sh/datcox.txt
sudo tac /var/log/vsftpd.log | grep "OK LOGIN" | cut -c26- | cut -d" " -f3 > /home/bobousse/scripts_sh/user.t
ce sont des instructions qui doivent forcément être exécutée en sudo donc n'y aurait il pas moyen de stocker le mot de passe dans le script pour que ca ne bloque pas?
Hors ligne
#7 Le 13/01/2006, à 13:57
- LaTheix
Re : traitement de fichier texte
ce sont des instructions qui doivent forcément être exécutée en sudo
Es-tu sur de toi ?
Je n'ai vsftp installé, mais je peux lire tous les log sur ma breezy sans utiliser sudo . Donc un cat (ou tac) sur /var/log/vsftpd.log doit être possible avec ton login (si tu es admin de ton système, ce qui est mon cas actuellement)
Dans le cas contraire, regarde le(s) propriétaire(s) du fichier, rajoute ton compte au groupe détenteur du fichier et mets-le en lecture seule pour ce groupe (chmod 644)
Quant à mettre un mot de passe root dans ton script (donc en clair), primo je ne crois pas cela possible, secundo ce serait une hérésie et un gage certain pour compromettre sérieusement la sécurité de ton système ....
Hors ligne
#8 Le 13/01/2006, à 14:56
- bobousse
Re : traitement de fichier texte
c'est bon ce problème la est reglé
mais est-ce possible de remplacer un caractère par une chaine vide dans un fichier j'ai essayé
sed 's/\" "/""/g' < essai
et ca ne fonctionne pas donc après j'ai essayé
sed 's/\" "//g'
mais ca ne fonctionne pas non plus je ne sais plus quoi faire
Hors ligne
#9 Le 13/01/2006, à 15:41
- LaTheix
Re : traitement de fichier texte
mais est-ce possible de remplacer un caractère par une chaine vide dans un fichier
Je ne comprends pas ta question.
Remplacer un caractère :
- tu veux rempalcer un caractère par rien (la chaine vide) ? donc supprimer ce caractère ?
- supprimer un mot?
- supprimer tous les mots (soit une ligne, un paragraphe) ?
Donc un exemple précis et des questions mieux formulées sont la clé pour obtenir une réponse ad hoc ... parceque jusqu'à maintenant, on ne peut ps dire que tu sois très clair (genre t'as un souci, je te donne une piste, ça bug, puis ça marche après coup mais tu dis pas pourquoi , bref ....)
Ton exemple de code avec sed ne veut pas dire grand chose (donc ça n'aide pas des masses non plus), un man sed ou 'tutotial sed' dans qoogle te fera peut-être avancer ....
Hors ligne
#10 Le 13/01/2006, à 16:51
- bobousse
Re : traitement de fichier texte
c'est vrai désolé je suis pas très clair dans mes questions et là encore le problème est résolu il fallait faire un
tr -d " " <nom_du_fichier
et puis pour la résolution de mes problèmes vous les verrez tous en temps voulu je balancerai mon script sur le forum quand il sera fini
le seul problème qu'il me reste maintenant c'est pour ma base de données pour gnuplot mais là je devrais trouver encore merci
Hors ligne
Pages : 1