Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 17/03/2010, 15h54   #1
Invité régulier
 
Homme Cedric Moretti
Chef de projet MOA
Inscription : février 2010
Messages : 51
Détails du profil
Informations personnelles :
Nom : Homme Cedric Moretti
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : février 2010
Messages : 51
Points : 7
Points : 7
Par défaut compter un caractere precis ligne par ligne puis retirer ces lignes

Bonjour
Voici j'ai un soucis
j'ai un fichier avec 150 lignes
dans un premier temps on m'a demandé de compter ligne par ligne le nombre de fois que le caractère "c" et "C" apparaissait
pour cela j'ai effectué cette commande
Code :
1
2
awk 'BEGIN {FS="c"}{print NF-1}' nomfichier
awk 'BEGIN {FS="C"}{print NF-1}' nomfichier
afin d'avoir le nombre total de caractères C et c.
J'ai essayé
Code :
awk 'BEGIN {FS="C" || FS="c"}{print NF-1}' nomfichier
afin de n'avoir pas à répéter la ligne mais cela n'a pas fonctionné.

donc je cherche maintenant à additionner ligne par ligne afin d'avoir le nombre total et ensuite si ce chiffre est supérieur à un nombre (ici 25) retirer la ligne
un grand merci
Moretti Cedric

Dernière modification par al1_24 ; 18/03/2010 à 09h06.
cedric190985 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 19h44   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 259
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 259
Points : 7 043
Points : 7 043
bjr

Code :
1
2
 for i in $(sed 's/[^Cc]//g' $fichier) ; do 
sed -i '/ccccccccccccccccccccccccc.*/d' $fichier ; done
bien sur la variable $fichier contient le chemin et le nom du fichier à éditer.

nota : j'ai mis "ccccccccccccccccccccccccc.*" uniquement pour l'exemple il y a une syntaxe sed pour dire 'c 25* de suite' bien sur mais je te laisse chercher...

mais c'est pour comprendre la syntaxe :
pour tout i dans [aurtre caractere que c ou C remplacé par rien] ; faire chercher '25c*' et delete la ligne ; fin_faire

je résume :
il te reste à ajouter la syntaxe propre pour 25c et bien sur à la remplacer par "25c ou C" après
et ton effacement de toute ligne contenant 25C sera fini


bon aller je suis sympa je donne la solution :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
francois@francois-laptop:/tmp$ cat toto
fdjlhfdghdfkghdfkjghdfkjhckgjfkhgkdfjghkfghkc
kgjfklgdflgdflghd
ccc
kdslfjdsfcdsjfdlsfjslc
 
ccccccccccCCCC
francois@francois-laptop:/tmp$ echo ccccccccccCCCCcccccccccccCCCCCCCCCCCCCC >> toto 
francois@francois-laptop:/tmp$
francois@francois-laptop:/tmp$ for i in $(sed 's/[^Cc]//g' toto) ; do sed -i '/[cC]\{25\}/d' toto ; done 
francois@francois-laptop:/tmp$ cat toto
fdjlhfdghdfkghdfkjghdfkjhckgjfkhgkdfjghkfghkc
kgjfklgdflgdflghd
ccc
kdslfjdsfcdsjfdlsfjslc
 
ccccccccccCCCC
francois@francois-laptop:/tmp$
comme ça seules les chaines de "c ou C" >= à 25 de suite sont effacées
enfin un conseil :

parce que je ne vois pas pourquoi tu veux garder le comptage des caractères non "c ou C", j'imagine que tu n'en a pas besoin au quel cas tu peux réduire le code à
Code :
sed -i '/[cC]\{25\}/d' fichier
et enfin si tu veux changer le nombre de caractères "c ou C" dont il faut effacer les lignes pour utiliser dans un script par exemple tu peux utiliser une variable comme ça
Code :
sed -i '/[cC]\{'${TA_VARIABLE}'\}/d' ${nom_fichier}

Dernière modification par frp31 ; 17/03/2010 à 19h57.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 23h45   #3
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Pour donner le nombre de c ou C dans le fichier file_in:
Code :
awk -F '[Cc]' '{n+=NF-1} END {print n}' file_in
Pour retirer les lignes qui ont 25 (ou plus) c ou C du fichier file_in (résultat dans file_out):
Code :
awk -F '[Cc]' 'NF-1 <= 25' file_in > file_out
Edit: fautes de français
__________________
Un problème bien posé est déjà résolu (H. Bergson).

Dernière modification par jmelyn ; 18/03/2010 à 20h34.
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 00h46   #4
Invité régulier
 
Homme Cedric Moretti
Chef de projet MOA
Inscription : février 2010
Messages : 51
Détails du profil
Informations personnelles :
Nom : Homme Cedric Moretti
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : février 2010
Messages : 51
Points : 7
Points : 7
Merci de vos réponses
je fais tout cela demain, je vous tiendrai au courant....

shell powerrrrrrrrrr
et linux power
cedric190985 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 08h39   #5
Invité régulier
 
Homme Cedric Moretti
Chef de projet MOA
Inscription : février 2010
Messages : 51
Détails du profil
Informations personnelles :
Nom : Homme Cedric Moretti
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : février 2010
Messages : 51
Points : 7
Points : 7
ca marche
merci à
jmelyn
&
frp31

pour leurs aide
cedric190985 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 07h41.


 
 
 
 
Partenaires

Hébergement Web