IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Traitement de lots de fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etudiant (Master ILC)
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant (Master ILC)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Par défaut Traitement de lots de fichiers
    Bonjour !

    Suite à des réponses satisfaisantes sur ce topic (http://www.developpez.net/forums/d13...lusieurs-json/), j'en ouvre un second afin de mettre en évidence un autre problème qui m'empêche d'arriver à ce que je veux.

    En effet, maintenant que j'ai lancé mon script sur le gros dossier de villes (~3.5 millions), awk me dit qu'il n'est pas content car il a trop d'arguments à traiter. J'aimerais donc pouvoir lancer mon script plusieurs fois sur un lot de fichiers à chaque fois différent. Pour rappel voici le dernier code en date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
     
    	echo '{ "docs" : [' > tmp
    	awk 'FNR!=NR{$0=","$0}1' ./cities2/* >> tmp
    	echo ' ] }' >> tmp
    	curl -vX POST http://root:*******@127.0.0.1:5984/cities/_bulk_docs -H 'Content-Type: application/json' -d "`cat tmp`"
    J'aimerais pouvoir traiter mes fichiers par lot, c'est à dire lancer la commande awk d'abord sur les fichiers 1 à 10.000, puis 10.001 à 20.000, etc. Le nom de mes fichiers est i.json, i étant un entier compris entre 1 et environ 3.500.000.

    Y'a t-il un moyen d'appliquer cette contrainte lors de la sélection du nom de fichier tout en gardant une vitesse d'exécution honorable ? Le fait de devoir traiter les fichiers par lot m'embête déjà beaucoup (car forcément, on y perd en performances)...

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 663
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf '%s\n' ./cities/* | xargs -L2092497 awk 'FNR!=NR{$0=","$0}1' > tmp
    2092497 correspond à la Limite supérieure POSIX de longueur d'argument (sur ce système) récupérée avec xargs --show-limits.
    est-ce la bonne limite à utiliser
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant (Master ILC)
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant (Master ILC)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf '%s\n' ./cities/* | xargs -L2092497 awk 'FNR!=NR{$0=","$0}1' > tmp
    2092497 correspond à la Limite supérieure POSIX de longueur d'argument (sur ce système) récupérée avec xargs --show-limits.
    est-ce la bonne limite à utiliser
    ...
    ?
    Tout d'abord merci d'être aussi présent sur les forums pour aider ton prochain.

    Ensuite, la longueur d'argument correspond certainement au nombre de caractères maximum, ce qui fait que xargs -L2092497 renverra un 'xargs: liste d'arguments trop longue'. Par contre, le script avec une valeur plus petite pour xargs (1000 fonctionne bien) résous le problème d'une manière plutôt rapide ! Merci donc.

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 354
    Par défaut
    Bonjour,
    Allez, un petit dernier pour la route, ensuite vacances...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
     
    	echo '{ "docs" : [' > tmp
            cat premierfichier.json >>tmp
    	find . -name '*.json' -not -name 'premierfichier.json' -printf "," -exec cat {} \; >> tmp
    	echo ' ] }' >> tmp
    	curl -vX POST http://root:*******@127.0.0.1:5984/cities/_bulk_docs -H 'Content-Type: application/json' -d "`cat tmp`"
    Reste à modifier la partie . -name '*.json' -not -name 'premierfichier.json' pour faire correspondre à la réalité.
    Le principe étant de prendre tous les fichiers que l'on a besoin sauf le premier...
    Après est-ce un peu ou beaucoup plus lent...? à tester.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Traitement par lot fichiers PDF
    Par Triton972 dans le forum Imagerie
    Réponses: 1
    Dernier message: 10/01/2012, 15h18
  2. Gpg - décrypter un lot de fichier
    Par segphault dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 25/08/2006, 11h19
  3. [VBA-Excel] Ouvrir un lot de fichier txt dans Excel
    Par Trollakuir dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/06/2006, 10h02
  4. Réponses: 18
    Dernier message: 22/06/2006, 17h55
  5. [XSLT] Appliquer un traitement xslt sur un fichier XML distant
    Par mabig dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 14/03/2006, 09h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo