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 :

Extraire données du résultat d'une commande


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Points : 79
    Points
    79
    Par défaut Extraire données du résultat d'une commande
    Bonjour,
    J'ai besoin d'extraire une donnée précise de ... 524 288 fichiers

    J'utilise la commande suivante :
    Code SHELL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gdalinfo MyFile.tiff

    Ce qui me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Driver: GTiff/GeoTIFF
    Files: map_11_0_0.tiff
    Size is 256, 256
    Coordinate System is:
    GEOGCRS["WGS 84",
        DATUM["World Geodetic System 1984",
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1]]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        CS[ellipsoidal,2],
            AXIS["geodetic latitude (Lat)",north,
                ORDER[1],
                ANGLEUNIT["degree",0.0174532925199433]],
            AXIS["geodetic longitude (Lon)",east,
                ORDER[2],
                ANGLEUNIT["degree",0.0174532925199433]],
        ID["EPSG",4326]]
    Data axis to CRS axis mapping: 2,1
    Origin = (-180.000000000000000,90.000000000000000)
    Pixel Size = (0.001373291015625,-0.001373291015625)
    Metadata:
      AREA_OR_POINT=Area
    Image Structure Metadata:
      INTERLEAVE=BAND
    Corner Coordinates:
    Upper Left  (-180.0000000,  90.0000000) (180d 0' 0.00"W, 90d 0' 0.00"N)
    Lower Left  (-180.0000000,  89.6484375) (180d 0' 0.00"W, 89d38'54.38"N)
    Upper Right (-179.6484375,  90.0000000) (179d38'54.38"W, 90d 0' 0.00"N)
    Lower Right (-179.6484375,  89.6484375) (179d38'54.38"W, 89d38'54.38"N)
    Center      (-179.8242188,  89.8242188) (179d49'27.19"W, 89d49'27.19"N)
    Band 1 Block=256x256 Type=Byte, ColorInterp=Palette
      Image Structure Metadata:
        NBITS=1
      Color Table (RGB with 2 entries)
        0: 0,0,0,255
        1: 255,255,255,255
    j'ai besoin d'extraire Upper Left plus précisément -180.0000000, 90.0000000 et de mettre ça dans un fichier global (pour la totalité des 524 288 fichiers) ou une ligne serait du type
    MyFile => -180.0000000, 90.0000000Comment je pourrais faire ça ?

    Merci de votre aide

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ gdalinfo MyFile.tiff | sed '/^Upper Left/!d;s/[^(]*(\([^)]*\)).*/\1/' 
    -180.0000000,  90.0000000

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Points : 79
    Points
    79
    Par défaut
    Merci beaucoup ça fonctionne parfaitement

    Je vais tenter de modifier la sortie avec sed pour obtenir une ligne comme ceci MyFile.tiff => -180.0000000, 90.0000000 avec retour à la ligne
    Pas évident pour un non initié cette syntaxe mais man sed devrait être mon ami (ainsi que les exemples / explications sur le net)

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par rlelamer Voir le message
    Bonjour,
    J'ai besoin d'extraire une donnée précise de ... 524 288 fichiers

    J'utilise la commande suivante :
    Code SHELL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gdalinfo MyFile.tiff

    Ce qui me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Corner Coordinates:
    Upper Left  (-180.0000000,  90.0000000) (180d 0' 0.00"W, 90d 0' 0.00"N)
    Lower Left  (-180.0000000,  89.6484375) (180d 0' 0.00"W, 89d38'54.38"N)
    j'ai besoin d'extraire Upper Left plus précisément -180.0000000, 90.0000000 et de mettre ça dans un fichier global (pour la totalité des 524 288 fichiers) ou une ligne serait du type
    MyFile => -180.0000000, 90.0000000
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ gdalinfo MyFile.tiff | sed '/^Upper Left/!d;s/[^(]*(\([^)]*\)).*/\1/' 
    -180.0000000,  90.0000000
    Du coup, une 'tite boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for f in *.tiff; do echo "$f => $(gdalinfo "$f" | sed '/^Upper Left/!d;s/[^(]*(\([^)]*\)).*/\1/')"; done > le_fichier_global.txt
    à supposer que *.tiff ramène la liste des fichiers qui sont tous dans le même dossier.
    Sinon y a find...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Du coup, une 'tite boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for f in *.tiff; do echo "$f => $(gdalinfo "$f" | sed '/^Upper Left/!d;s/[^(]*(\([^)]*\)).*/\1/')"; done > le_fichier_global.txt
    à supposer que *.tiff ramène la liste des fichiers qui sont tous dans le même dossier.
    Sinon y a find...
    Pourquoi chercher compliqué quand on peut faire beaucoup plus simple ...
    Moi qui comptais m'exciter les neurones pour faire ça qu'avec sed ...

    Merci beaucoup a vous 2, vous venez de me faire gagner un temps ... monstrueux

    EDIT:
    J'ai une erreur que je comprends pas très bien d'ailleurs puisque la commande "seule" fonctionne correctement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -bash: !d: event not found

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 474
    Points
    19 474
    Par défaut
    gdalinfo n'accepte qu'un seul fichier ? il ne peux pas prendre une liste ? ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Points : 79
    Points
    79
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    MacBook-Air-de-Romain: ~/VRTiles/tiff $ gdalinfo *.tiff
    -bash: /opt/homebrew/bin/gdalinfo: Argument list too long
     
    MacBook-Air-de-Romain: ~/VRTiles/tiff $ gdalinfo map_11_0_0.tiff map_11_0_1.tiff
    ERROR 6: Too many command options 'map_11_0_1.tiff'
    Usage: gdalinfo [--help-general] [-json] [-mm] [-stats | -approx_stats] [-hist] [-nogcp] [-nomd]
                    [-norat] [-noct] [-nofl] [-checksum] [-proj4]
                    [-listmdd] [-mdd domain|`all`] [-wkt_format WKT1|WKT2|...]*
                    [-sd subdataset] [-oo NAME=VALUE]* [-if format]* datasetname
     
    MacBook-Air-de-Romain: ~/VRTiles/tiff $
    Bah flute alors ...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 474
    Points
    19 474
    Par défaut
    Citation Envoyé par rlelamer Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MacBook-Air-de-Romain: ~/VRTiles/tiff $ gdalinfo *.tiff
    Bah flute alors ...
    j'avais zappé "524 288 fichiers" !

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Points : 79
    Points
    79
    Par défaut
    Alors je ne sais pas pourquoi mais si je le fais comme ceci

    Code SHELL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #!/bin/bash
     
    for f in *.tiff;
    do
        echo "$f => $(gdalinfo "$f" | sed '/^Upper Left/!d;s/[^(]*(\([^)]*\)).*/\1/')";
    done > PosGPS.txt

    et que je lance ce script, bah ça fonctionne correctement 🤷

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 474
    Points
    19 474
    Par défaut
    le ! dans le terminal appelle le Développement d'historique.
    or, par défaut, il n'y a pas d'historique dans un script.

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

Discussions similaires

  1. Extraire un nombre d'un résultat d'une commande
    Par Phi.n94 dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 13/06/2018, 12h06
  2. Récupérer une donnée via le résultat d'une commande
    Par Olivier Regnier dans le forum Unix
    Réponses: 2
    Dernier message: 11/06/2018, 14h04
  3. récupérer les résultats d'une commande linux dans une base de données
    Par fatimazahra kachiri dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/04/2014, 13h14
  4. Réponses: 2
    Dernier message: 02/01/2006, 10h39
  5. Ecrire le résultat d'une commande dans un fichier de l' OS
    Par Labienus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/02/2004, 11h04

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