#1 Le 27/07/2022, à 13:54
- MixT
recuperer un fichier contenu dans une liste
Hello tout le monde !
Sauriez-vous comment récupère un fichier un à un, contenu dans une liste, pour lui appliquer d'autres modification ultérieur ??
liste_fichier.txt
text1.txt
text2.txt
text3.txt
Merci !
Hors ligne
#2 Le 27/07/2022, à 14:05
- Tawal
Re : recuperer un fichier contenu dans une liste
Hello,
Ça dépend de ce que tu entends par "récupérer".
Mais si c'est obtenir son nom dans une variable alors :
while read -r fichier
do
commandes à appliquer sur le fichier "$fichier"
par exemple :
echo "$fichier"
cat "$fichier"
done < liste_fichiers.txt
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#3 Le 27/07/2022, à 14:37
- MixT
Re : recuperer un fichier contenu dans une liste
Les fichiers se trouvent dans une liste et j'aimerais récupérer les fichiers suivant la liste, je ne sais pas si c'est bien dit
Hors ligne
#4 Le 27/07/2022, à 14:39
- MicP
Re : recuperer un fichier contenu dans une liste
Bonjour
…appliquer des modifications aux fichiers …
Sans plus d'information concernant ces modifications,
je dirais qu'il te suffit d'utiliser la boucle while proposée par Tawal
en remplaçant la commande cat ou/et la commande echo par celle qui fera les modifications.
Dernière modification par MicP (Le 27/07/2022, à 14:40)
Hors ligne
#5 Le 27/07/2022, à 14:50
- MixT
Re : recuperer un fichier contenu dans une liste
Comme un grep par exemple
liste_de_fichier.txt
texte1.txt
texte2.txt
texte3.txt
Je voudrais prendre le fichier texte1.txt puis grep " jardin" et l'ajouter dans le fichier total.txt
Puis prendre le fichier texte2.txt puis grep " jardin" et l'ajouter dans le fichier total.txt ( par un cat >> )
Puis prendre le fichier texte3.txt puis grep " jardin" et l'ajouter dans le fichier total.txt ( par un cat >> )
Comme ça le fichier total.txt contient plusieurs lignes jardin suivant l'orde liste_de_fichiers.txt
Dernière modification par MixT (Le 27/07/2022, à 14:51)
Hors ligne
#6 Le 27/07/2022, à 14:52
- Watael
Re : recuperer un fichier contenu dans une liste
pourquoi les noms sont-ils lister dans un fichier ?
on peut imaginer travailler avec xargs et sed...
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 27/07/2022, à 14:58
- MixT
Re : recuperer un fichier contenu dans une liste
Il fait que je grep les lignes dans l'ordre dans lequel elles sont dans liste_de_fichiers
for i in liste_de_fichier.txt ; do
grep 'jardin' b | cat b >> total.txt
done
Mais cela ne marche pas
Dernière modification par MixT (Le 27/07/2022, à 15:03)
Hors ligne
#8 Le 27/07/2022, à 18:29
- Tawal
Re : recuperer un fichier contenu dans une liste
Heuu ...
Tout simplement :
grep -h jardin $(<liste_fichier.txt) > total.txt
Edit: Illustration
$ cat list.txt
./1-fich
./3-fich
./2-fich
$
$ cat 1-fich
1-jardin
$
$ cat 2-fich
2-jardin
$
$ cat 3-fich
3-jardin
$
$ grep -h jardin $(<list.txt) > total.txt
$
$ cat total.txt
1-jardin
3-jardin
2-jardin
$
Edit2 :
Mais attention, si un nom de fichier dans la liste contient un espace, ça va rater !
Dernière modification par Tawal (Le 27/07/2022, à 18:49)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#9 Le 28/07/2022, à 11:52
- MixT
Re : recuperer un fichier contenu dans une liste
Merci beaucoup de ton aide, mais le problème c'est que dans total.txt, jardin doit être listé dans le même ordre que dans liste_de_texte.txt
Dans le repertoire, j'ai texte1 texte2 texte3, or ils ont été créer à des dates différentes, donc pour etre sur qu'ils soient concaténé suivant un ls -v je fait
ls -v texte* > liste_of_texte.txt
J’obtiens
texte1.txt
texte2.txt
texte3.txt
Ensuite, les fichiers texte contiennent la ligne jardin. Je voudrais les grep et les ajouter dans total.txt suivant l'ordre dans liste-of-texte.txt
jardin # issue de texte1.txt
jardin # issue de texte2.txt
jardin # issue de texte3.txt
Je dois faire une boucle de type
liste="liste-of-texte.txt"
for i in "$liste"; do # le texte1 et lu, puis le texte2, puis le texte3
echo "$i"
cat $i >> total.txt
done
Hors ligne
#10 Le 28/07/2022, à 12:44
- Watael
Re : recuperer un fichier contenu dans une liste
pourquoi n'as-tu pas testé la première solution proposée par Tawal ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 28/07/2022, à 13:27
- MixT
Re : recuperer un fichier contenu dans une liste
Je vais le faire.....
Hors ligne
#12 Le 28/07/2022, à 13:49
- Tawal
Re : recuperer un fichier contenu dans une liste
La solution par grep respecte l'ordre de la liste de fichier.
Regarde mon illustration, la liste des fichiers est 1-fich suivi de 3-fich suivi de 2-fich.
L'ordre des lignes dans total.txt est bien 1-jardin, 3-jardin et 2-jardin.
Dernière modification par Tawal (Le 28/07/2022, à 13:51)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#13 Le 28/07/2022, à 14:01
- MicP
Re : recuperer un fichier contenu dans une liste
Bonjour
1/ Préparation du contexte de test :
Je créé 3 fichiers nommés texte1.txt texte2.txt et texte3.txt
contenant plusieurs lignes dont une de ces lignes contient le mot jardin :
michel@deb114x:~/aeff$ i=100; for f in texte{1..3}.txt; do ((i--)); echo -e "\nContenu du fichier \"$f\" :\n\nbla bla\nun jardin numéro $i venant du fichier \"$f\"\nbli bli\n" >$f; done
michel@deb114x:~/aeff$
=======
2/ Vérification du contexte :
J'affiche le contenu de chacun de ces 3 fichiers :
michel@deb114x:~/aeff$ cat texte1.txt
Contenu du fichier "texte1.txt" :
bla bla
un jardin numéro 99 venant du fichier "texte1.txt"
bli bli
michel@deb114x:~/aeff$
michel@deb114x:~/aeff$ cat texte2.txt
Contenu du fichier "texte2.txt" :
bla bla
un jardin numéro 98 venant du fichier "texte2.txt"
bli bli
michel@deb114x:~/aeff$
michel@deb114x:~/aeff$ cat texte3.txt
Contenu du fichier "texte3.txt" :
bla bla
un jardin numéro 97 venant du fichier "texte3.txt"
bli bli
michel@deb114x:~/aeff$
============================
============================
3/ La ligne de commande pour l'extraction :
Maintenant, j'extrais de chacun de ces fichiers (dans l'ordre correspondant au chiffre qui est dans leur nom)
la ligne qui contient le mot jardin
michel@deb114x:~/aeff$ sed -n '/jardin/p' texte{1..3}.txt
un jardin numéro 99 venant du fichier "texte1.txt"
un jardin numéro 98 venant du fichier "texte2.txt"
un jardin numéro 97 venant du fichier "texte3.txt"
michel@deb114x:~/aeff$
=======
4/ en option :
Et bien sûr, je peux renverser l'ordre des fichiers :
michel@deb114x:~/aeff$ sed -n '/jardin/p' texte{3..1}.txt
un jardin numéro 97 venant du fichier "texte3.txt"
un jardin numéro 98 venant du fichier "texte2.txt"
un jardin numéro 99 venant du fichier "texte1.txt"
michel@deb114x:~/aeff$
=======
Et s'il s'agit d'utiliser un tableau (array) contenant une liste de noms de fichier quelconques déjà ordonnée selon vos choix
on pourra tout aussi bien donner ce tableau en paramètre à la ligne de commande sed
michel@deb114x:~/aeff$ listeDesNoms=( texte2.txt texte1.txt texte3.txt )
michel@deb114x:~/aeff$
michel@deb114x:~/aeff$ sed -n '/jardin/p' ${listeDesNoms[@]}
un jardin numéro 98 venant du fichier "texte2.txt"
un jardin numéro 99 venant du fichier "texte1.txt"
un jardin numéro 97 venant du fichier "texte3.txt"
michel@deb114x:~/aeff$
Dernière modification par MicP (Le 28/07/2022, à 14:21)
Hors ligne
#14 Le 28/07/2022, à 14:20
- MixT
Re : recuperer un fichier contenu dans une liste
Pour ce code
Je ne suis pas très à l'aise avec la boucle while mais bon,
while read -r fichier # j'obtiens le message `texte2.txt': not a valid identifier
do
commandes à appliquer sur le fichier "$fichier"
par exemple :
echo "$fichier"
cat "$fichier"
done < liste_fichiers.txt # Est-ce que liste_fichiers.txt dois déja exister ?
Le résultat de cette boucle est renvoyé où ?
Dernière modification par MixT (Le 28/07/2022, à 14:24)
Hors ligne
#15 Le 28/07/2022, à 14:28
- MicP
Re : recuperer un fichier contenu dans une liste
Si :
…
liste_fichier.txttext1.txt text2.txt text3.txt
…
alors :
sed -n '/jardin/p' $(<liste_fichier.txt)
=====
Mais si :
…
…
liste_de_fichier.txttexte1.txt texte2.txt texte3.txt
…
…
alors :
sed -n '/jardin/p' $(<liste_de_fichier.txt)
=======
Mais si :
…
…
Dans le repertoire, j'ai texte1 texte2 texte3, or ils ont été créer à des dates différentes, donc pour etre sur qu'ils soient concaténé suivant un ls -v je faitls -v texte* > liste_of_texte.txt
J’obtiens
texte1.txt texte2.txt texte3.txt
…
…
alors :
sed -n '/jardin/p' $(<liste_of_texte.txt)
… Le résultat de cette boucle est renvoyé où ? …
Si la ligne de commande(s) a été lancée dans une fenêtre de terminal,
le retour de commande sera affiché dans la fenêtre de terminal dans laquelle la ligne de commande aura été lancée,
… et si tu veux renvoyer le retour de la commande dans un fichier nommé : fichierRetourDeLaCommande.txt
sed -n '/jardin/p' $(<liste_of_texte.txt) > fichierRetourDeLaCommande.txt
=======
Mais si le nom du fichier contenant la liste des fichiers est : liste_fichiers.txt
alors :
sed -n '/jardin/p' $(<liste_fichiers.txt) > fichierRetourDeLaCommande.txt
Dernière modification par MicP (Le 28/07/2022, à 15:20)
Hors ligne
#16 Le 28/07/2022, à 16:43
- Watael
Re : recuperer un fichier contenu dans une liste
quel est le gain de sed par rapport à grep ?
# Est-ce que liste_fichiers.txt dois déja exister ?
l'emploi d'un fichier temporaire est très facultatif :
while read var
do
echo "$var"
done < <(ls -v text*)
Le résultat de cette boucle est renvoyé où ?
mais pourquoi ne testes-tu pas les codes qu'on te propose ?
qu'observes-tu ?
Dernière modification par Watael (Le 28/07/2022, à 16:54)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#17 Le 28/07/2022, à 17:43
- MicP
Re : recuperer un fichier contenu dans une liste
quel est le gain de sed par rapport à grep ? …
Aucun (enfin, je pense…), mais comme grep avait déjà été proposé par Tawal dans son message #8
alors j'ai proposé autre chose en espérant que ça convienne à MixT.
Dernière modification par MicP (Le 28/07/2022, à 17:44)
Hors ligne
#18 Le 28/07/2022, à 18:34
- MixT
Re : recuperer un fichier contenu dans une liste
Merci beaucoup !
J'ai testé la boucle while, mais le resultat s'affiche dans le prompt et pas possible dans un fichier exterieur
Dernière modification par MixT (Le 28/07/2022, à 18:34)
Hors ligne
#19 Le 28/07/2022, à 18:41
- Watael
Re : recuperer un fichier contenu dans une liste
il faut rediriger la sortie de la boucle, comme l'ont montré Tawal et MicP.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#20 Le 28/07/2022, à 18:48
- Tawal
Re : recuperer un fichier contenu dans une liste
Oups, mauvaise manip.
Et message supprimé.
Désolé
En gros tu peux rediriger la sortie de la boucle while :
while read -r fichier
do
commandes à appliquer sur le fichier "$fichier"
done < fichier_liste > fichier_de_sortie
Dernière modification par Tawal (Le 28/07/2022, à 18:49)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne