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 :

Modification de valeurs à l'intérieur d'un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 8
    Par défaut Modification de valeurs à l'intérieur d'un fichier
    bonjour,
    j'ai un fichier texte contenant plusieurs (environ 50000) valeurs de longitudes et latitudes sur deux colonnes. il y a des valeurs aberrantes (des zéros) sur une succession de lignes dans ce fichiers. j'aimerai faire une interpolation pour remplacer ces valeurs aberrantes. Mes recherches sur le net me disent qu'un script awk peut m'aider mais le problème c'est que je suis encore un débutant sous les scripts shell. Déjà je n'arrive pas à déterminer le numéro de ligne de la première et dernière valeur aberrante. quelqu'un peut il m'aider svp.
    merci

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 361
    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 361
    Par défaut
    Bonjour,

    Expose ton problème, donne des exemples, et quelqu'un répondra, mais là, on a pas matière à quoi que ce soit.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 8
    Par défaut
    en gros j'ai des valeur de la sorte:

    1 1
    1 1
    1 1
    1 1
    . .
    . .
    . .
    1 1
    0 0
    0 0
    0 0
    0 0
    1 1
    1 1
    1 1

    les 0 sont mes valeurs aberrantes et les 1 sont mes valeurs de longitudes et latitudes (j'ai juste mis des 1 pour l'explication). je veux faire une interpolation linéaire pour remplacer les zéros. pour cela je veux d'abord déterminer le numéro de ligne de la première valeur de zéro mais je n'arrive pas.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2016
    Messages : 10
    Par défaut
    Salut,

    Personnellement, pour automatiser des modifications, je fais des scripts PHP qui permettent de traiter des contenus de fichiers. J'ai fait récemment du dédoublonnage de fichier csv énormes. Ce n'est pas aussi rapide que du C mais c'est simple à programmer.

    Stéphane

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 361
    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 361
    Par défaut
    Non,
    L'approche n'est pas bonne, explique la suite comme comment tu feras après pour faire ton interpolation, va jusqu'au bout de la description de ta solution.
    Si tu veux le n° de ligne du premier 0 0, un simple grep -n "0 0" fichier est suffisant mais là tu pars selon moi sur une usine à gaz.

    Le conseil: Essayer de définir, autant que possible, son algo en ne passant qu'une seule fois sur le fichier.

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 8
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Non,
    L'approche n'est pas bonne, explique la suite comme comment tu feras après pour faire ton interpolation, va jusqu'au bout de la description de ta solution.
    Si tu veux le n° de ligne du premier 0 0, un simple grep -n "0 0" fichier est suffisant mais là tu pars selon moi sur une usine à gaz.

    Le conseil: Essayer de définir, autant que possible, son algo en ne passant qu'une seule fois sur le fichier.

    je vais utiliser un script awk pour faire l'interpolation, si on considère la première colonne par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    awk 'BEGIN { val1= < val1> ; val2 = <val2> ; n1 = <n1> ; n2= <n2>} 
                       ( NR > n1 && NR < n2) ? 
                       print val1 + (val2 - val1) *  (NR - n1) / (n2 - n1) :
                       print $1
    avec val1 = valeur juste avant le début des valeurs aberrantes, val2 = valeur après les valeurs aberrantes, n1 et n2 sont leurs numéro de lignes.
    mon problème c'est de déterminer ces val1, val2, n1 et n2

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 361
    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 361
    Par défaut
    Ok,
    Maintenant, la question qui "fâche": comment détermines tu que c'est une valeur aberrante ?
    0 1 est-elle aberrante pour la première colonne mais pas pour la 2ème ?

    Dans le cas suivant:
    1 1
    0 0
    1 1

    Est-ce que le 0 0 est aberrant ou faut-il plusieurs lignes consécutives pour que cela soit aberrant ?

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2016
    Messages : 12
    Par défaut
    Citation Envoyé par lefloxy Voir le message
    je vais utiliser un script awk pour faire l'interpolation, si on considère la première colonne par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    awk 'BEGIN { val1= < val1> ; val2 = <val2> ; n1 = <n1> ; n2= <n2>} 
                       ( NR > n1 && NR < n2) ? 
                       print val1 + (val2 - val1) *  (NR - n1) / (n2 - n1) :
                       print $1
    avec val1 = valeur juste avant le début des valeurs aberrantes, val2 = valeur après les valeurs aberrantes, n1 et n2 sont leurs numéro de lignes.
    mon problème c'est de déterminer ces val1, val2, n1 et n2
    il te faut un booleen (aberr) qui prend la valeur FAUX (ou 0) quand tu est dans une séquence de valeurs normales et VRAI (ou 1) dans une séquence de valeurs aberrantes.

    tu parcours ton fichier ligne par ligne en recopiant les lignes non aberrantes dans le fichier résultat (tant que les données sont valables c'est de la simple recopie)

    quand tu rentres dans une séquence aberrante, tu arrêtes de recopier les lignes, tu mémorises la dernière valeur non aberrante (val1) et tu entames un compteur de lignes aberrantes (n),

    quand tu arrives à une nouvelle ligne correcte, tu sais alors combien de lignes aberrantes tu devras remplacer (interpoler) tu notes la valeur (val2) de ce début de séquence correcte
    et tu interpoles tes n valeurs (qui étaient aberrantes) , tu n'oublies pas de recopier la valeur que tu viens de lire (val2) la première d'une nouvelle séquence "normale"

    tu as donc 4 cas à étudier : séquences valables et aberrantes, et passages d'un type de séquence à l'autre.
    cela donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    awk 'BEGIN { aberr = 0 ; n = 0 }
          ($1 != 0) && (aberr == 0)  { print $0 ; val1 = $1}
          ($1 == 0) && (aberr == 0)  { aberr = 1 ; n= 1 ; }
          ($1 == 0) && (aberr == 1)  { n++ }
          ($1 != 0) && (aberr == 1)  { aberr = 0 ; val2 = $1 ; for ( k = 1 ; k < n ; k++) print ( val1 + ( val2 - val1) * ( k / n )) ; n = 0 ; print $0 }'
    pour simplifier j'ai considéré qu'il n'y avait qu'une seule valeur ($1) par ligne de fichier. A toi d'adapter à tes données et à tes critères "d'aberration"

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

Discussions similaires

  1. [XSLT 2.0] XMl : modification de valeur au sein d un fichier
    Par raphael75015 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 31/10/2013, 11h01
  2. [Débutant] Lecture de fichier texte et modification de valeurs
    Par niepoc dans le forum MATLAB
    Réponses: 19
    Dernier message: 25/04/2008, 17h32
  3. [DOM XML] Modification de valeur dans un fichier XML
    Par scorpion1611 dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 05/09/2007, 14h53
  4. Réponses: 1
    Dernier message: 02/08/2007, 16h17
  5. Copie d'un fichier XML avec modification de valeur d'attribut
    Par CocoRambo dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 11/07/2007, 09h21

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