Traiter un fichier txt ligne par ligne
Résolu
GHISLINO
Messages postés
214
Date d'inscription
Statut
Membre
Dernière intervention
-
GHISLINO Messages postés 214 Date d'inscription Statut Membre Dernière intervention -
GHISLINO Messages postés 214 Date d'inscription Statut Membre Dernière intervention -
Bonjour, tous
j'ai besoin d'aide pour ecrire un script shell capable de traiter un fichier txt ligne par ligne.
voici le format du fichier txt
Header SEV="":ACKSTS="":FRDNAME="":EVTTYPE="":SPECPB="":EVTTIME="":CLRSTS="":CLRTIME="";
SEV="MINOR":ACKSTS="NACK":FRDNAME="BSCMAN DUEKOUE_2 ra 1":EVTTYPE="EQUIPMENT":SPECPB="183899 , RX-TX [10] ANTENNA-VSWR-WARNING [11]":EVTTIME="2011/06/14 06:07:22":CLRSTS="CLR":CLRTIME="2011/06/14 06:07:33";
en gras correspond a l'entête du fichier
ce qui suit correspond a une ligne du fichier txt.
1)donc ce que je veux faire d'abord c est de rechercher toutes les lignes ou j'ai SEV="indeterminate" et les supprimer
2) de rechercher dans les lignes le nom du champ FRDNAME ( exemple dans cette ligne FRDNAME = BSCMAN DUEKOUE_2 ra1 ) et de compter le nombre de fois ce nom apparait et s'il est superieur ou égal 30 fois copier toutes les lignes dans un fichier excel et inscrire en face dans une colone le nombre de ligne compte.
merci d avance pour votre aide
j'ai besoin d'aide pour ecrire un script shell capable de traiter un fichier txt ligne par ligne.
voici le format du fichier txt
Header SEV="":ACKSTS="":FRDNAME="":EVTTYPE="":SPECPB="":EVTTIME="":CLRSTS="":CLRTIME="";
SEV="MINOR":ACKSTS="NACK":FRDNAME="BSCMAN DUEKOUE_2 ra 1":EVTTYPE="EQUIPMENT":SPECPB="183899 , RX-TX [10] ANTENNA-VSWR-WARNING [11]":EVTTIME="2011/06/14 06:07:22":CLRSTS="CLR":CLRTIME="2011/06/14 06:07:33";
en gras correspond a l'entête du fichier
ce qui suit correspond a une ligne du fichier txt.
1)donc ce que je veux faire d'abord c est de rechercher toutes les lignes ou j'ai SEV="indeterminate" et les supprimer
2) de rechercher dans les lignes le nom du champ FRDNAME ( exemple dans cette ligne FRDNAME = BSCMAN DUEKOUE_2 ra1 ) et de compter le nombre de fois ce nom apparait et s'il est superieur ou égal 30 fois copier toutes les lignes dans un fichier excel et inscrire en face dans une colone le nombre de ligne compte.
merci d avance pour votre aide
A voir également:
- Traiter un fichier txt ligne par ligne
- Partager photos en ligne - Guide
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Mètre en ligne - Guide
4 réponses
bjr
c'est facile à faire en Python que je connais, mais si c'est en shell que tu veux le faire, je ne peux pas aider
c'est facile à faire en Python que je connais, mais si c'est en shell que tu veux le faire, je ne peux pas aider
bonjour
j'ai pu trouver quelque chose
#!/bin/bash
#
#
cut -d '"' -f6,10,12,16 micra.txt > micra1.txt # cette ligne recupere les champs dont j'ai besoin dans fichier source
grep "DUEKOUE_2" micra1.txt? > final.txt # cette ligne recherche un nom specifique et copie toute les lignes qui contienent ce critere
nl final.txt? > final2.txt # ce code numerote les lignes du fichier obtenu
MES PROBLEMES SONT :
J'ai plusieurs critere a rechercher donc je voudrais les passer en argument pour chaque critere donc j ai cree un fichier .conf ou j 'ai liste tous mes arguments
exemple du fichier .conf
DUEKOUE_2;
SAKAOUO;
etc ..
je veux que mon script puisse venir chercher l'argument dans ce fichier et lire le fichier intial et copier les lignes qui comporte ce critere si l'occurence de ce dernier est superieur ou egal 30.
NB: pour chaque argument creer un nouveau fichier.
pourvoir passer chaque fichier créé en argument pour pourvoir numéroté chaque ligne
merci d avance pour vos reponses.
cdlt.
j'ai pu trouver quelque chose
#!/bin/bash
#
#
cut -d '"' -f6,10,12,16 micra.txt > micra1.txt # cette ligne recupere les champs dont j'ai besoin dans fichier source
grep "DUEKOUE_2" micra1.txt? > final.txt # cette ligne recherche un nom specifique et copie toute les lignes qui contienent ce critere
nl final.txt? > final2.txt # ce code numerote les lignes du fichier obtenu
MES PROBLEMES SONT :
J'ai plusieurs critere a rechercher donc je voudrais les passer en argument pour chaque critere donc j ai cree un fichier .conf ou j 'ai liste tous mes arguments
exemple du fichier .conf
DUEKOUE_2;
SAKAOUO;
etc ..
je veux que mon script puisse venir chercher l'argument dans ce fichier et lire le fichier intial et copier les lignes qui comporte ce critere si l'occurence de ce dernier est superieur ou egal 30.
NB: pour chaque argument creer un nouveau fichier.
pourvoir passer chaque fichier créé en argument pour pourvoir numéroté chaque ligne
merci d avance pour vos reponses.
cdlt.
Salut,
Regarde la page de man de grep de plus près, notamment les options "-v, -c, -o) et intéresses-toi à fgrep (ou grep -F), avec ça tu devrais bien t'en sortir.
Sinon jette un oeil à "awk" qui devrait être parfait pour ton exercice ;-))
Regarde la page de man de grep de plus près, notamment les options "-v, -c, -o) et intéresses-toi à fgrep (ou grep -F), avec ça tu devrais bien t'en sortir.
Sinon jette un oeil à "awk" qui devrait être parfait pour ton exercice ;-))
bonjour
juste pour vous informer que j ai resolu mon probleme a force patience et de recherche
trouver ci dessous mon code je peux cocher resolu
#!/bin/bash
#
# Written by bangouame koissi ghislain - 11 oct. 2011 a 02:01
#
FICH=micra1
for btsx in $(cat fichierBTS.conf); do
bts=$(echo $btsx|cut -d';' -f1)
i=$(echo $btsx | grep -c $bts $FICH)
echo "***********************************************"
echo $bts "-->"
echo $i
if test $i -ge 30;
then
grep $bts $FICH | cut -d'"' -f 1,2,3,4 > $bts
else
echo "Pas de probleme !!!!"
fi
echo "\n***********************************************"
done
juste pour vous informer que j ai resolu mon probleme a force patience et de recherche
trouver ci dessous mon code je peux cocher resolu
#!/bin/bash
#
# Written by bangouame koissi ghislain - 11 oct. 2011 a 02:01
#
FICH=micra1
for btsx in $(cat fichierBTS.conf); do
bts=$(echo $btsx|cut -d';' -f1)
i=$(echo $btsx | grep -c $bts $FICH)
echo "***********************************************"
echo $bts "-->"
echo $i
if test $i -ge 30;
then
grep $bts $FICH | cut -d'"' -f 1,2,3,4 > $bts
else
echo "Pas de probleme !!!!"
fi
echo "\n***********************************************"
done