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 24/01/2012, 18h14   #1
 
Inscription : janvier 2012
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 12
Points : -4
Points : -4
Par défaut Script ou Commande shell UNIX

Bonjour à tous et à toutes

Je voudrais avoir un petit script qui permet de me lire un fichier "csv" (plusieurs lignes et colonnes séparées par des ';') puis remplacer les valeurs (nombres) d'une colonne (connue) par des mots (je ne peux pas l'appliquer à toutes les colonnes séparément car il y a des colonnes qui contiennent des valeurs identiques), puis de supprimer les lignes qui restent (celles qui n'ont pas de colonnes qui ont étaient remplacées).....

Merci de me répondre vite.
powertay11 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/01/2012, 19h44   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 538
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 538
Points : 7 754
Points : 7 754
1;2;3;4;1;2;3;4 => 1;2;a;4;1;2;3;4 ????
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 21h17   #3
 
Inscription : janvier 2012
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 12
Points : -4
Points : -4
Merci de votre réponse. Je vous explique un peu. Moi j'ai le couple (a=1) que j'applique sur l'exemple suivant

1;2;3;4;5;6 a;2;3;4;5;6
2;2;3;4;7;6 ==> a;2;3;4;7;6
1;4;5;7;8;9


sinon je supprime la ligne et j'élimine le vide
powertay11 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 25/01/2012, 09h26   #4
 
Inscription : janvier 2012
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 12
Points : -4
Points : -4
Quelqu'un pour m'aider ?
powertay11 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 25/01/2012, 09h36   #5
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Ce n'est pas tres clair pour moi,

Peux tu donner 4-5 lignes d'un fichier avec a coté le resultat de l'action souhaitée ( pas de changement, tel changement, ligne supprimée car ... )

?
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2012, 09h41   #6
Membre actif
 
Femme
Apprenti/ Dev C++
Inscription : décembre 2009
Messages : 105
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Apprenti/ Dev C++
Secteur : Finance

Informations forums :
Inscription : décembre 2009
Messages : 105
Points : 175
Points : 175
Désolée mais je ne comprend pas vraiment ta question . Si tu cherche à remplacer des caractères dans un fichier tu peux utiliser sed (je te conseille de lire la doc parce que la syntaxe est un petit peu compliquée) ou si sed ne fonctionne pas awk , qui est l'outil de lecture/ecriture dans un fichier.
Malinaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 10h59   #7
 
Inscription : janvier 2012
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 12
Points : -4
Points : -4
OK merci, c'est ce que j'ai trouvé aussi sur le net, il faut utiliser awk apparemment
powertay11 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 25/01/2012, 11h05   #8
 
Inscription : janvier 2012
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 12
Points : -4
Points : -4
INPUT:

1;2;3;4;5;6
2;2;3;4;7;6
1;4;5;7;8;9

traitement1: remplacer '1' par 'a'

a;2;3;4;5;6
(ligne vide (supprimée) car le '2' n'a pas de signification)
a;2;3;4;7;6

traitement2= OUTPUT: éliminer les lignes vides

a;2;3;4;5;6
a;2;3;4;7;6
powertay11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 17h46   #9
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 538
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 538
Points : 7 754
Points : 7 754
Code :
1
2
3
4
5
6
7
8
9
$ cat t
1;2;3;4;5;6
2;2;3;4;7;6
1;4;5;7;8;9 
$ sed '/1/!d;s/1/a/' t > resultat
$ cat resultat 
a;2;3;4;5;6
a;4;5;7;8;9 
$
conrétement
Code :
1
2
 
$ sed '/1/!d;s/1/a/' t > resultat
la premiere commande /1/!d = si on trouve 1 sur la ligne on efface pas
la dexième command s/1/a/ = substituer 1 par a (sans conditions)
le ";" sépare les deux sous-commandes.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 18h03   #10
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Citation:
Envoyé par frp31 Voir le message
la premiere commande /1/!d = si on trouve 1 sur la ligne on efface pas
J'aurai plutôt dit le contraire, si on ne trouve pas "1" (la négation étant exprimée par le "!") sur la ligne on efface (avec la commande "d" (delete))

Perso j'aurai plus vu :

Code :
sed -n '/^1\b/{s//a/p}' fichier
-n
Impression sur la sortie standard sur demande (voir le flag "p" plus loin)

/^1\b/
Si la ligne commence (^) par "1", sans aucun caractères alphanumériques derrière (\b exprime une limite de mot).

{
Regroupement de commandes à appliquer

s//a/p
On substitue la valeur du motif déjà cité (autrement dit le "1") par un "a", et on imprime sur la sortie standard avec le flag "p".

}
Fin du regroupement de commandes

__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 25/01/2012, 20h08   #11
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 538
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 538
Points : 7 754
Points : 7 754
Citation:
Envoyé par zipe31 Voir le message
Salut,


J'aurai plutôt dit le contraire, si on ne trouve pas "1" (la négation étant exprimée par le "!") sur la ligne on efface (avec la commande "d" (delete))

Perso j'aurai plus vu :

Code :
sed -n '/^1\b/{s//a/p}' fichier
-n
Impression sur la sortie standard sur demande (voir le flag "p" plus loin)

/^1\b/
Si la ligne commence (^) par "1", sans aucun caractères alphanumériques derrière (\b exprime une limite de mot).

{
Regroupement de commandes à appliquer

s//a/p
On substitue la valeur du motif déjà cité (autrement dit le "1") par un "a", et on imprime sur la sortie standard avec le flag "p".

}
Fin du regroupement de commandes

bien vu
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 10h52   #12
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Par défaut exemple avec awk ...

Code :
echo "a;1;2;3;4" |awk -F";" 'BEGIN{ OFS=";" }  $1 == "a" { $1 = "toto" ; print }'
Je ne sais pas si c'est plus efficace que le sed ...
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/01/2012, 23h26   #13
 
Inscription : janvier 2012
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 12
Points : -4
Points : -4
Merci pour vos réponses, j'y suis arrivé

Maintenant je veux savoir s'il y a un moyen de convertir le fichier résultant en décimal, je vous explique...j'ai de grand nombre en sortie dans mon fichier alors il me les affiche du genre 2,14E+11 y a t il un moyen de le convertir en décimal enfin il l'est déjà c à d l'afficher sur plusieurs positions 214 000 000 000 ????????
powertay11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 17h53   #14
 
Inscription : janvier 2012
Messages : 12
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 12
Points : -4
Points : -4
Merci de me répondre SVP.

j'ai aussi une autre question dans le même contexte: Je voudrais supprimer des lignes selon la valeur de la première colonne,

par exemple:

Code :
1
2
read jd  (jour début)    supposon que $jd=15
read jf (jour fin)           //           //   $jf=18
on a le fichier suivant en INPUT:

14/01/2012;a;b;c;d
15/01/2012;a;b;c;d 
16/01/2012;a;b;c;d
17/01/2012;a;b;c;d
18/01/2012;a;b;c;d
19/01/2012;a;b;c;d
20//01/2012;a;b;c;d
je voudrais avoir en OUTPUT:

15/01/2012;a;b;c;d 
16/01/2012;a;b;c;d
17/01/2012;a;b;c;d
18/01/2012;a;b;c;d
toutes les autres lignes seront supprimées. Merci de me répondre, je vous serai reconnaissant
powertay11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 18h15   #15
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Re-

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ cat plop 
14/01/2012;a;b;c;d
15/01/2012;a;b;c;d
16/01/2012;a;b;c;d
17/01/2012;a;b;c;d
18/01/2012;a;b;c;d
19/01/2012;a;b;c;d
20//01/2012;a;b;c;d
 
$ jd=15;jf=18
 
$ sed -n "/^${jd}/,/^${jf}/p" plop 
15/01/2012;a;b;c;d
16/01/2012;a;b;c;d
17/01/2012;a;b;c;d
18/01/2012;a;b;c;d
 
$
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h52.


 
 
 
 
Partenaires

Hébergement Web