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 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