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/06/2011, 16h09   #1
Invité de passage
 
Femme
Étudiant
Inscription : juin 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : juin 2011
Messages : 6
Points : 0
Points : 0
Par défaut Créer un fichier avec la commande cut

Bonjour,
voila j'ai un problème.

J'ai un fichier FICHIER1.txt qui contient :
champs1 | champs2 | champs3 | champs 4 | champs5
champs1 | champs2 | champs3 | champs 4 | champs5
...

J'aimerais que les lignes de ce fichier soient réparties dans plusieurs autres fichiers en fonction de champs3 et champs4, avec le(s) nouveau(x) fichier(s) ayant pour titre :
champs3_champs4.txt

j'ai donc pensé à utiliser une commande de la sorte :

Code :
cat FICHIER1.txt | echo >> "`cut -d"|" -f3`"_"`cut -d"|" -f4`".txt
Mais ca ne fonctionne absolument pas.

Quelqu'un aurait-il un idée ou une piste pour régler mon problème ?

Merci beaucoup.
megima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 16h35   #2
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 982
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 982
Points : 6 101
Points : 6 101
Bonjour.

Une solution parmi beaucoup d'autre (à adapter) :

Code :
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
 
FILE=...
 
cat $FILE | while read ligne
do
        arg1=$(echo $ligne | cut -d "|" -f3)
        arg2=$(echo $ligne | cut -d "|" -f4)
        echo $ligne >> $arg1"_"$arg2.txt
done
Sinon tu peut aussi te débrouiller avec awk ...

Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/06/2011, 16h46   #3
Invité de passage
 
Femme
Étudiant
Inscription : juin 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : juin 2011
Messages : 6
Points : 0
Points : 0
Par défaut Tu m'as tué

Ca fonctionne, merci beaucoup pour ta réponse!
megima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 16h54   #4
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
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 534
Points : 7 743
Points : 7 743
Code :
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
 
FILE=...
 
while read ligne
do
        arg1=$(echo $ligne | cut -d "|" -f3)
        arg2=$(echo $ligne | cut -d "|" -f4)
        echo $ligne >> $arg1"_"$arg2.txt
done < $FILE
sera plus rapide si il y a beaucoup de fichiers à traiter, et surtout plus propre...
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 24/06/2011, 16h59   #5
Invité de passage
 
Femme
Étudiant
Inscription : juin 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : juin 2011
Messages : 6
Points : 0
Points : 0
Oui merci, c'est sur, dans mon fichier des fois il y a jusqu'a 1000 lignes...
megima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 17h05   #6
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Est-tu vraiment obligé d'utiliser cut ?! C'est pas forcément la solution la plus propre...

Edit: par exemple avec awk
Code :
1
2
3
4
5
6
7
8
$ cat fic.txt
champs1.1 | champs2 | champs3 | champs 4 | champs5
champs1.2 | champs2 | champs3 | champs 4 | champs5
champs1.2 | champs2 | champs3 | champs 4.1 | champs5
champs1 | champs2 | champs3.1 | champs 4 | champs5
$ awk -F'|' '{gsub (/ \| /,"|",$0); print > $3"_"$4".txt" }' fic.txt
$ ls *champ*
champs3.1_champs 4.txt  champs3_champs 4.1.txt  champs3_champs 4.txt
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 24/06/2011, 17h14   #7
Invité de passage
 
Femme
Étudiant
Inscription : juin 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : juin 2011
Messages : 6
Points : 0
Points : 0
Ben, disons que je ne vois pas quelle autre commande utiliser...
megima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 17h19   #8
Invité de passage
 
Femme
Étudiant
Inscription : juin 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : juin 2011
Messages : 6
Points : 0
Points : 0
Excuse moi j'avais Alek-c j'avais pas vu la suite de ton post.

En effet, avec awk c'est pas mal aussi.

Après, mon champs3 et champs4 sera toujours un seul et unique mot, sans espace même entre les | qui les séparent.
megima est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2011, 17h28   #9
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Dans ce cas, gsub n'est pas indispensable.

Code :
awk -F'|' '{print > $3"_"$4".txt" }' fic.txt
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/06/2011, 17h31   #10
Invité de passage
 
Femme
Étudiant
Inscription : juin 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : juin 2011
Messages : 6
Points : 0
Points : 0
ok, merci beaucoup pour ta réponse!
megima 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 +2. Il est actuellement 01h54.


 
 
 
 
Partenaires

Hébergement Web