Lire un fichier et comparer ses lignes

Résolu
Lucifugus -  
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 !
Configuration: Linux
Firefox 3.0.15

5 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  2. Lucifugus
     
    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
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  4. Lucifugus
     
    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
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Essaie avec :

      ls -1v | nl

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

    Posez votre question
  6. Lucifugus
     
    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
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      De rien, c'est fait pour ;-))
      0