Lire un fichier et comparer ses lignes
Résolu
Lucifugus
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
Bonsoir,
Je cherche actuellement a faire un script shell qui me permettrait de faire le trie, je m'explique .
Ayant une liste tel que
1
2
3
4
5
récupéré suite au résultat d'une commande
ls | cut -c1
je chercher a faire un script shell lancer comme tel : ./script.sh 3 5
les deux paramètres serraient les délimiteurs , cad comme affichage l'idéal serrait 3 4 5 .
Sauf que je souhaite récupérer cette liste pour ensuite la relire et ajouter le 3 4 5 (qui serrait en réalité le nom de fichier .sql) et de l'appliquer a ma base de donné (avec mysql --user= ect ...)
Voilà je ne sais pas trop comment m'y prendre donc je viens poster ici ;)
Merci d'avance, tout renseignement me serrait très utile !
Je cherche actuellement a faire un script shell qui me permettrait de faire le trie, je m'explique .
Ayant une liste tel que
1
2
3
4
5
récupéré suite au résultat d'une commande
ls | cut -c1
je chercher a faire un script shell lancer comme tel : ./script.sh 3 5
les deux paramètres serraient les délimiteurs , cad comme affichage l'idéal serrait 3 4 5 .
Sauf que je souhaite récupérer cette liste pour ensuite la relire et ajouter le 3 4 5 (qui serrait en réalité le nom de fichier .sql) et de l'appliquer a ma base de donné (avec mysql --user= ect ...)
Voilà je ne sais pas trop comment m'y prendre donc je viens poster ici ;)
Merci d'avance, tout renseignement me serrait très utile !
A voir également:
- Lire un fichier et comparer ses lignes
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire un fichier epub - Guide
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
5 réponses
Salut,
Avec "sed" ?
;-))
Avec "sed" ?
[tmpfs]$ cat foo.sh #! /bin/sh #set -xv ls -1 *.sql | sed -n "$1,$2p" [tmpfs]$ ls -1 *.sql fichier1.sql fichier2.sql fichier3.sql fichier4.sql fichier5.sql fichier6.sql fichier7.sql fichier8.sql fichier9.sql [tmpfs]$ ./foo.sh 4 8 fichier4.sql fichier5.sql fichier6.sql fichier7.sql fichier8.sql [tmpfs]$ ./foo.sh 3 6 fichier3.sql fichier4.sql fichier5.sql fichier6.sql [tmpfs]$ ./foo.sh 6 9 fichier6.sql fichier7.sql fichier8.sql fichier9.sql [tmpfs]$
;-))
Avant tout merci jipicy ;)
Je ne connaissais pas sed x)
Mais j'ai toujours un petit soucis :
j'ai ma liste de fichier qui commence par le chiffre qui le différencie des autres (1_toto.sql 2_toto.sql ect ...)
j'ai beau avoir tester un ls -l *.sql | sed -n "1,2p" sa ne fonctionne pas =/
Et par la suite j'aimerais stocker le résultat du ls trier dans une variable pour pouvoir appliquer a ma db tous les fichiers sql qui ressortent de ce trie !
donc le stockage je pense que c'est variable=$(commande magique)
Sauf que là encore je bloque comment faire pour parcourir variable et ressortir chaque nom de fichier sql qu'il aura (1 par ligne je pense) pour les utilisers et les appliquer ?
Merci encore !!!
Je ne connaissais pas sed x)
Mais j'ai toujours un petit soucis :
j'ai ma liste de fichier qui commence par le chiffre qui le différencie des autres (1_toto.sql 2_toto.sql ect ...)
j'ai beau avoir tester un ls -l *.sql | sed -n "1,2p" sa ne fonctionne pas =/
Et par la suite j'aimerais stocker le résultat du ls trier dans une variable pour pouvoir appliquer a ma db tous les fichiers sql qui ressortent de ce trie !
donc le stockage je pense que c'est variable=$(commande magique)
Sauf que là encore je bloque comment faire pour parcourir variable et ressortir chaque nom de fichier sql qu'il aura (1 par ligne je pense) pour les utilisers et les appliquer ?
Merci encore !!!
Re-
Qu'est-ce qui ne fonctionne pas ???
Au cas ou... c'est un UN dans ls -1 et non pas un ELLE minuscule ;-\
Comme les fichiers à trier commencent par un chiffre, mieux vaut utiliser la commande "ls -1v", pour que l'affichage se fasse en respectant l'ordre de la numérotation :
Pour ton autre question, pas besoin de stocker le résultat dans une variable, il suffit de faire une boucle sur le résultat en passant chaque fichier en argument à ta commande mysql...
Un truc du genre devrait le faire :
Qu'est-ce qui ne fonctionne pas ???
Au cas ou... c'est un UN dans ls -1 et non pas un ELLE minuscule ;-\
Comme les fichiers à trier commencent par un chiffre, mieux vaut utiliser la commande "ls -1v", pour que l'affichage se fasse en respectant l'ordre de la numérotation :
jp@MDK:~/tmpfs ssh$ ls -1 15_toto.sql 16_toto.sql 17_toto.sql 18_toto.sql 19_toto.sql 1_toto.sql 20_toto.sql 21_toto.sql 22_toto.sql 23_toto.sql 24_toto.sql 25_toto.sql 2_toto.sql 3_toto.sql 4_toto.sql 5_toto.sql jp@MDK:~/tmpfs ssh$ ls -1v 1_toto.sql 2_toto.sql 3_toto.sql 4_toto.sql 5_toto.sql 15_toto.sql 16_toto.sql 17_toto.sql 18_toto.sql 19_toto.sql 20_toto.sql 21_toto.sql 22_toto.sql 23_toto.sql 24_toto.sql 25_toto.sql jp@MDK:~/tmpfs ssh$
Pour ton autre question, pas besoin de stocker le résultat dans une variable, il suffit de faire une boucle sur le résultat en passant chaque fichier en argument à ta commande mysql...
Un truc du genre devrait le faire :
jp@MDK:~/tmpfs ssh$ for fich in $(ls -1v | sed -n '2,5p'); do echo "mysql -u toto -ptata bdd < ${fich}";done mysql -u toto -ptata bdd < 2_toto.sql mysql -u toto -ptata bdd < 3_toto.sql mysql -u toto -ptata bdd < 4_toto.sql mysql -u toto -ptata bdd < 5_toto.sql jp@MDK:~/tmpfs ssh$Bien sur adapter la commande à tes besoins, et sortir le "echo"...
Merci beaucoup sa fonctionne très bien !!
Juste une petite précision qui ma un peux chagriné :
dans mon cas précis les fichiers commensais par 8409 8411 ect ...
sauf que sed marche très bien mais en fonction de la position du fichier dans le résutat de la commande ls
c'est à dire que si j'ai un
$ ls -1
8409_toto.sql
8411_toto.sql
8412_toto.sql
9876_toto.sql
et que je fais un
$ ls -1 | sed -n '1,2p'
8409_toto.sql
8411_toto.sql
8412_toto.sql
9876_toto.sql
j'aurais :
8409_toto.sql
8411_toto.sql
Donc voilà ;)
Mais grâce à toi j'ai réussi a faire ce que je voulais donc un GRAND MERCI !!!!!!!!
dernière petite question, est il possible de faire un ls qui donne un numéro au fichier celon sa position dans l'affichage ?
comme :
$ ...
1 8409_toto.sql
2 8411_toto.sql
3 8412_toto.sql
4 9876_toto.sql
Juste une petite précision qui ma un peux chagriné :
dans mon cas précis les fichiers commensais par 8409 8411 ect ...
sauf que sed marche très bien mais en fonction de la position du fichier dans le résutat de la commande ls
c'est à dire que si j'ai un
$ ls -1
8409_toto.sql
8411_toto.sql
8412_toto.sql
9876_toto.sql
et que je fais un
$ ls -1 | sed -n '1,2p'
8409_toto.sql
8411_toto.sql
8412_toto.sql
9876_toto.sql
j'aurais :
8409_toto.sql
8411_toto.sql
Donc voilà ;)
Mais grâce à toi j'ai réussi a faire ce que je voulais donc un GRAND MERCI !!!!!!!!
dernière petite question, est il possible de faire un ls qui donne un numéro au fichier celon sa position dans l'affichage ?
comme :
$ ...
1 8409_toto.sql
2 8411_toto.sql
3 8412_toto.sql
4 9876_toto.sql
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question