Lire un fichier et comparer ses lignes

Résolu/Fermé
Lucifugus - 14 nov. 2009 à 01:45
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 16 nov. 2009 à 16:02
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 !
A voir également:

5 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
14 nov. 2009 à 08:11
Salut,

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]$ 

;-))
0
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 !!!
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 nov. 2009 à 09:35
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 :

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"...
0
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 nov. 2009 à 15:28
Essaie avec :

ls -1v | nl

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
C'est bien sa !!!

Encore merci en tout cas, je ne poste que très rarement sur les forums car je préfère trouver la solution de moi même mais là je dois avouer que sa ma donné une bonne leçon et ma fais gagner beaucoup de temps !!

Merci pour tous :)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 nov. 2009 à 16:02
De rien, c'est fait pour ;-))
0