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 04/08/2011, 14h39   #1
Nouveau Membre du Club
 
Femme
Inscription : août 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : août 2011
Messages : 22
Points : 29
Points : 29
Par défaut Récupérer les enregistrements à partir d'une liste

Bonjour à tous,

Je souhaite réaliser une opération simple de recherche dans un fichier à partir d'une liste.

J'ai des lignes dans un fichier avec plusieurs champs:

Format du fichier DATA (Les lettre a,b,c pour le numéro de ligne, et les nombres 1,2,3 pour le numéro du champ.

DATA
Ligne 1 Champ a1 Champ a2 Champ a3...
Ligne 2 Champ b1 Champ b2 Champ b3...
Ligne 3 Champ c1 Champ c2 Champ c3...
Ligne 4 Champ d1 Champ d2 Champ d3...
Ligne 5 Champ e1 Champ e2 Champ e3...



Dans un deuxième fichier j'ai une liste de champs.

LISTE
Ligne1 Champ a2
Ligne2 Champ c2...
Ligne3 Champ e2...


Je cherche à faire ressortir toutes les lignes qui ressortent de DATA lorsque le Champ [a-z]2 du fichier LISTE match avec le Champ [a-z]2 du fichier DATA

Dans ce cas précis je cherche à récupérer du fichier DATA

Fichier résultat

Ligne 1 Champ a1 Champ a2 Champ a3...
Ligne 3 Champ c1 Champ c2 Champ c3...
Ligne 5 Champ e1 Champ e2 Champ e3...


J'ai trouvé une solution avec sed en générant une série de commande sed à partir de mon fichier LISTE via excel.


sed -n '/12345/p' DATA;sed -n '/6789A/p' DATA;sed -n '/BCDEF/p' DATA

En procédant de cette manière, cela fonctionne très bien or c'est très long car le fichier DATA fait plus d'1go de données texte :/

En effet je redemande à chaque commande de reparcourir le fichier DATA, alors que si je pouvais travailler avec sed sur une seule ouverture du fichier je gagnerai en temps d'exécution, à moins que je ne me trompe et que sed n'est pas du tout adapté pour ce cas.

Si quelqu'un a déjà été confronté à ce cas, je suis preneuse.
erustika est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/08/2011, 14h47   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
regarde du côté de la commande join
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 04/08/2011, 15h52   #3
Membre du Club
 
Inscription : août 2009
Messages : 65
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 65
Points : 44
Points : 44
L'idée est de lire une seule et unique fois ton fichier DATA et de le ventiler en fichiers élémentaires.

La commande :
Code :
gawk '{print $0 >> $2}' DATA
va générer les fichiers suivants :
a2
b2
c2
d2
....

Le fichier a2 contiendra tous les enregistrements dont la seconde colonne est a2 et ainsi de suite....

Ensuite, il suffit de lire ton fichier LISTE.

Si tu trouves a2 dans ton fichier LISTE, il suffira d'utiliser
Code :
cat a2 >> fichier_resultat
Si tu trouves b2 dans ton fichier LISTE, il suffira d'utiliser
Code :
cat b2 >> fichier_resultat
Les fichiers qui ne sont pas dans LISTE seront à supprimer à la fin.
Je ne sais pas si c'est la solution la plus intelligente
emmachane est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 04/08/2011, 16h45   #4
Membre du Club
 
Inscription : août 2009
Messages : 65
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 65
Points : 44
Points : 44
Contenu du fichier DATA
Code :
1
2
3
4
5
6
cat DATA
a1 a2 a3 a4 a5 a6
b1 b2 b3 b4 b5 b6
c1 c2 c3 c4 c5 c6
d1 d2 d3 d4 d5 d6
e1 e2 e3 e4 e5 e6
Contenu du fichier LIST
Commande gawk
Code :
gawk '{print $0 > $2}' DATA
Génération des fichiers
Code :
1
2
3
4
5
6
 
a2
b2
c2
d2
e2
Contenu d'un fichier
Code :
1
2
cat a2
a1 a2 a3 a4 a5 a6
Traitement
Code :
1
2
3
4
5
6
7
8
9
10
 
for nom_fic in `cat LIST`
do
   if [[ -f ${nom_fic} ]]
       then
             cat ${nom_fic} >> fic_resultat
       else
            echo "fichier inexistant"
   fi
done
Le résultat donne
Code :
1
2
3
4
5
 cat fic_resultat
 
a1 a2 a3 a4 a5 a6
c1 c2 c3 c4 c5 c6
e1 e2 e3 e4 e5 e6
emmachane est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 04/08/2011, 17h02   #5
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,

@emmachane : Pourquoi se compliquer la vie ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ cat DATA 
a1 a2 a3 a4 a5 a6
b1 b2 b3 b4 b5 b6
c1 c2 c3 c4 c5 c6
d1 d2 d3 d4 d5 d6
e1 e2 e3 e4 e5 e6

$ cat list 
a2
c2
e2

$ fgrep -f list DATA 
a1 a2 a3 a4 a5 a6
c1 c2 c3 c4 c5 c6
e1 e2 e3 e4 e5 e6

$
__________________
$ 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 04/08/2011, 17h13   #6
Membre du Club
 
Inscription : août 2009
Messages : 65
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 65
Points : 44
Points : 44
C'est la raison pour laquelle, j'ai annoncé d'entrée que ce n'est peut-être pas la façon la plus intelligente de faire . Tu viens d'en faire la démonstration
emmachane est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 05/08/2011, 13h03   #7
Nouveau Membre du Club
 
Femme
Inscription : août 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : août 2011
Messages : 22
Points : 29
Points : 29
Merci beaucoup emmachane et Zipe31 !

Pour une raison que j'ignore encore cela ne marche pas chez moi

J'ai strictement recopié le code ci-dessus et utilisé les mêmes noms de fichiers.

Code :
1
2
3
4
5
6
7
 
 # cat DATA
a1 a2 a3 a4 a5 a6
b1 b2 b3 b4 b5 b6
c1 c2 c3 c4 c5 c6
d1 d2 d3 d4 d5 d6
e1 e2 e3 e4 e5 e6
Code :
1
2
3
4
5
 
# cat list
a2
c2
e2
Code :
1
2
3
 
# fgrep -f list DATA
#
si j'inverse les fichiers

Code :
1
2
3
4
5
 
# fgrep -f DATA list
a2
c2
e2
Je tourne sur du BASH, c'est peut-être ça le problème, la commande fgrep n'est pas reconnue...???

En plus fgrep est la fonction adapté pour ce type de problème alors je ne comprend pas, d'un seul coup je suis perdue....
erustika est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/08/2011, 14h11   #8
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 535
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 535
Points : 7 748
Points : 7 748
Citation:
Envoyé par erustika Voir le message
Merci beaucoup emmachane et Zipe31 !

Je tourne sur du BASH, c'est peut-être ça le problème, la commande fgrep n'est pas reconnue...???
si tu ne l'as pas tu peux tjrs l'installer, soit depuis un package si il est disponible soit depuis ses sources.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/08/2011, 02h05   #9
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par erustika Voir le message
Merci beaucoup emmachane et Zipe31 !

Pour une raison que j'ignore encore cela ne marche pas chez moi

J'ai strictement recopié le code ci-dessus et utilisé les mêmes noms de fichiers.

Code :
1
2
3
4
5
6
7
 
 # cat DATA
a1 a2 a3 a4 a5 a6
b1 b2 b3 b4 b5 b6
c1 c2 c3 c4 c5 c6
d1 d2 d3 d4 d5 d6
e1 e2 e3 e4 e5 e6
Code :
1
2
3
4
5
 
# cat list
a2
c2
e2
Code :
1
2
3
 
# fgrep -f list DATA
#
si j'inverse les fichiers

Code :
1
2
3
4
5
 
# fgrep -f DATA list
a2
c2
e2
Je tourne sur du BASH, c'est peut-être ça le problème, la commande fgrep n'est pas reconnue...???
Salut
Déjà l'interpréteur utilisé n'a pas d'effet sur le fait qu'une commande soit connue ou pas. Et si fgrep n'était pas reconnue, il te mettrait un truc style "fgrep not found".

Citation:
Envoyé par erustika Voir le message
En plus fgrep est la fonction adapté pour ce type de problème alors je ne comprend pas, d'un seul coup je suis perdue....
L'avantage d'Unix/Linux; c'est qu'il y a tellement d'outils que l'on peut toujours trouver autre chose pour produire le même résultat...
Code bash :
cat list |while read val; do grep "$val" DATA; done
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 06/08/2011, 03h44   #10
Membre habitué
 
Avatar de Levi59
 
Homme
Étudiant
Inscription : août 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 46
Points : 126
Points : 126
Citation:
Envoyé par Sve@r
L'avantage d'Unix/Linux; c'est qu'il y a tellement d'outils que l'on peut toujours trouver autre chose pour produire le même résultat...
Code bash :
Sélectionner tout - Visualiser dans une fenêtre à part
Code :
cat list |while read val; do grep "$val" DATA; done
Useless use of cat...

cette écriture est meilleur :
Code :
while read val; do grep "$val" DATA; done < list
Levi59 est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 06/08/2011, 08h58   #11
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par Levi59 Voir le message
cette écriture est meilleur :
Avis purement subjectif. Les deux écritures ont des avantages comme des inconvénients. Celle que j'ai utilisée permet d'appliquer un traitement sur n'importe quel flux entrant issu d'une commande (ping, traceroute, etc). Mais aura l'inconvénient de ne pas pouvoir mémoriser de variable (perdue en fin de pipe). La tienne permet de créer et conserver des variables mais ne peut traiter qu'un fichier...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 06/08/2011, 09h16   #12
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
Citation:
Envoyé par Sve@r Voir le message
La tienne permet de créer et conserver des variables mais ne peut traiter qu'un fichier...
Non non
Code :
while read val; do grep "$val" DATA; done < <(list toto fich)
__________________
$ 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 11
Vieux 06/08/2011, 10h36   #13
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Bonjour,

<(liste) est une substitution de processus, où liste est une liste de commandes, pas une liste de fichiers.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 06/08/2011, 10h41   #14
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 N_BaH Voir le message
Bonjour,

<(liste) est une substitution de processus, où liste est une liste de commandes, pas une liste de fichiers.
Oups honte à moi J'ai oublié le "cat"

Code :
while read val; do grep "$val" DATA; done < <(cat list toto fich)
Merci N_BaH
__________________
$ 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 06/08/2011, 11h06   #15
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par zipe31 Voir le message
Oups honte à moi J'ai oublié le "cat"
As-tu remarqué que mon post de ce matin était en réponse à la remarque de Levi59 "useless use of cat" ?
Donc on passe de cat fic | while read à while read ... << (cat fic)Wééé
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 06/08/2011, 11h29   #16
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
Citation:
Envoyé par Sve@r Voir le message
As-tu remarqué que mon post de ce matin était en réponse à la remarque de Levi59 "useless use of cat" ?
Donc on passe de cat fic | while read à while read ... << (cat fic)Wééé
Oui oui j'avais remarqué

Attention toutefois, la syntaxe est "< <(cat ...)" et non pas "<<(cat...)"

Mais hormis mon oubli du "cat", c'était surtout pour souligner également le fait qu'on évite un sous-shell et donc que les variables créées restent exploitables
__________________
$ 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 07/08/2011, 04h51   #17
Nouveau Membre du Club
 
Femme
Inscription : août 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : août 2011
Messages : 22
Points : 29
Points : 29
Merci à tous pour votre aide, cela fonctionne très bien!

  • Pour revenir à la première solution

Citation:
Envoyé par al1_24 Voir le message
regarde du côté de la commande join
J'ai réussi à réaliser ceci:

Code :
1
2
3
4
# join -11 -22 list DATA 
a2 a1 a3 a4 a5 a6
c2 c1 c3 c4 c5 c6
e2 e1 e3 e4 e5 e6
Il ne me reste plus qu'à inverser les deux premières colonnes

Code :
1
2
3
4
# awk -F' ' 'BEGIN {OFS=" "} { print $2,$1,$3,$4}'  < res 
a1 a2 a3 a4 a5 a6
c1 c2 c3 c4 c5 c6
e1 e2 e3 e4 e5 e6
  • La seconde solution

En faite elle marche très bien, même pour la valeur a2 (du fichier list) par exemple contenu dans une chaine de caractères 2a2xxx78 (du fichier DATA) par exemple.

La remarque de Sve@r est donc justifié

Citation:
Envoyé par Sve@r Voir le message
Salut
Déjà l'interpréteur utilisé n'a pas d'effet sur le fait qu'une commande soit connue ou pas. Et si fgrep n'était pas reconnue, il te mettrait un truc style "fgrep not found".
J'ai tout bêtement constitué mon fichier sous windows et donc oublié de faire la conversion dos2unix

Merci donc à tous, pour une grande débutante sous linux, j'ai apprise beaucoup de choses merci
erustika est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/08/2011, 22h21   #18
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par erustika Voir le message
  • La seconde solution

En faite elle marche très bien, même pour la valeur a2 (du fichier list) par exemple contenu dans une chaine de caractères 2a2xxx78 (du fichier DATA) par exemple.

La remarque de Sve@r est donc justifié



J'ai tout bêtement constitué mon fichier sous windows et donc oublié de faire la conversion dos2unix
Bien vu. Effectivement le fait que fgrep ne marche pas aurait dû nous mettre la puce à l'oreille qu'il y avait un pb sur le fichier "list"...

Citation:
Envoyé par erustika Voir le message
Merci donc à tous, pour une grande débutante sous linux, j'ai apprise beaucoup de choses merci
Débutante mais déjà au fait de manipulation de fichiers, des outils comme grep, dos2unix, etc donc déjà bien à l'aise...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/08/2011, 21h38   #19
Membre habitué
 
Avatar de Levi59
 
Homme
Étudiant
Inscription : août 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2011
Messages : 46
Points : 126
Points : 126
Citation:
Envoyé par Sve@r Voir le message
La tienne permet de créer et conserver des variables mais ne peut traiter qu'un fichier...
Excusez mon temps de réponse mais il est possible à moindre frais de se passer de cat inutiles tout en ne limitant pas le nombre de fichiers de la redirection :
Code :
1
2
3
4
5
6
7
for FILE in "Fichier1" "Fichier2" "Fichier3"
do 
    while read
    do 
        echo $REPLY
    done < $FILE
done
Levi59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 23h00   #20
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par Levi59 Voir le message
Excusez mon temps de réponse mais il est possible à moindre frais de se passer de cat inutiles tout en ne limitant pas le nombre de fichiers de la redirection :
Code :
1
2
3
4
5
6
7
for FILE in "Fichier1" "Fichier2" "Fichier3"
do 
    while read
    do 
        echo $REPLY
    done < $FILE
done
Quand je disais "ne peut traiter qu'un fichier", je voulais faire comprendre "ne peut traiter que du fichier" et non "un seul fichier" !!!

Accessoirement, rajouter une structure de boucle shell (qui, rappelons-le, reste "interprété") juste pour éviter d'utiliser cat (qui, rappelons-le, est un programme "compilé") est, à mon avis, peu judicieux !!!
Code bash :
1
2
3
4
while read
do
    echo $REPLY
done < <(cat "Fichier1" "Fichier2" "Fichier3")

Ce n'est pas parce que, parfois, le cat est utilisé inutilement qu'il faut commencer à le faire passer pour un truc d'hérétique à éviter à tout prix !!!

En plus, je suis sûr que le "Useless use of cat" a été créé pour limiter des trucs du style cat fic |grep machin...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h37.


 
 
 
 
Partenaires

Hébergement Web