Forum Programmation.shell opération sur des colonnes d'un fichier

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-2
25
fév.
2017

Bonjour à tous
en fait je suis débutant avec la programmation shell et je trouve du mal à résoudre mon prblème. j'ai un fichier à 2 colonnes de la forme
5301 1931
5301 1932
5301 1933
5301 1935
5311 1922
5311 1923
5311 1924
je dois vérifier sur la colonne 2 la différence de valeurs successivement (1931-1932); (1932-1933);… etc s'il ya un décalage > 1 je dois compter le nombre de décalage en tenant compte de la colonne 1 si le nombre de la colonne change je dois refaire l'opération le faire tout le cumul des occurrences trouvées sachant que sur la colonne 1 l'incrémentation est de 10. et je cherche à cumuler le nombre d'occurrence 'condition [(si valeur1-valeur2)>1 je dois déclencher le compteur] sur la colonne 2.
merci d'avance pour votre aide

  • # les bases de la programmation c'est l'algorithmie

    Posté par  . Évalué à 6. Dernière modification le 25 février 2017 à 11:34.

    ce n'est pas le langage, tu es debutant en shell, mais tu saurais le faire dans un autre langage ?

    alors d'abord ecrire ton algorithme dans ta langue natale,
    moi c'est le francais,
    et ca donnerait :

    tant que j'ai des lignes dans le fichier
      lire la ligne
      prendre nouvelle_colonne1 nouvelle_colonne2
    
      regarder si la colonne1 à changer en comparant avec ancienne_colonne1
      faire ton histoire de comparaison entre nouvelle_colonne2 et ancienne_colonne2
      stocker le resultat
    
      stocker nouvelle_colonne1 dans ancienne_colonne1
      stocker nouvelle_colonne2 dans ancienne_colonne2
      passer à la ligne suivante
    fin de la boucle "tant que"
  • # Moi yapatouh compris.

    Posté par  . Évalué à 1.

    J’aime bien faire des opérations sur des chaînes, mais là j’avoue être un peu perdu.
    Ce que tu cherches à faire ne me semble pas clair.

    je dois vérifier sur la colonne 2
    la différence de valeurs successivement (1931-1932); (1932-1933);… etc
      si décalage > 1
        alors compter le nombre de décalage
    
        tenant compte de la colonne 1
        si colonne 1 change
          alors refaire l'opération le faire tout le cumul des occurrences trouvées
          sur la colonne 1 l'incrémentation est de 10.
          je cherche à cumuler le nombre d'occurrence 'condition [(si valeur1-valeur2)>1 je dois déclencher le compteur] sur la colonne 2.

    Je ne comprends pas vraiment ce qu’est le décalage.
    À priori ce serait la différence entre colonne 2 d’une ligne et de sa suivante.
    Sauf que dans la suite tu veux compter ce décalage ; du coup je suis perdu.

    Qu’est-ce que ce compteur ?
    Ce que devra retourner ton script ?

    • [^] # Re: Moi yapatouh compris.

      Posté par  . Évalué à 1.

      En fait tu veux :
      compter les différences strictement supérieurs à 1 entre les colonnes 2 des des lignes qui se suivent, pour une valeur de colonne 1 donnée ?

      0  1
      0  2
      0  3  <--- ici pour 0
      0  5
      0  4
      10 5  <--- ici pour 10
      10 7  <--- ici pour 10
      10 11
      10 12 <-- pas ici, c’est < 1
      10 7
      20 15
      20 16
      20 17

      Par exemple ici ça ferait { 0 => 1, 10 => 2, 20 => 0 }.
      C’est bien ça ou il me faut un café plus balèze ? (-:

      • [^] # Re: Moi yapatouh compris.

        Posté par  . Évalué à 2.

        facile alors

        pour chacune des lignes
          regarder colonne1
          regarder colonne2
          faire colonne2_actuelle - colonne2_precedente et stocker cette valeur dans difference_valeur
          si difference_valeur >1
          alors compteur[colonne1] = +1
          finsi
          stocker colonne1_courante dans colonne1_ancienne
          stocker colonne2_courante dans colonne2_ancienne
        fin pour
    • [^] # Re: Moi yapatouh compris.

      Posté par  . Évalué à -1.

      Bonjour,
      je dois tester :
      tant que la valeur de la col1 est la meme
      faire la difference entre valeurs de col2 dans l'ordre indiqué (val2-val1; val3-val2,…etc) si la diff est > 1 je dois compter cette occurence
      mon script doit compter combien de fois ya de valeur > 1 dans l'opération de differnce
      je ne sais pas comment le faire svp me faire ce script.
      merci bien de ton aide

      • [^] # Re: Moi yapatouh compris.

        Posté par  . Évalué à 3.

        svp me faire ce script

        Ben voyons… :-/

      • [^] # Re: Moi yapatouh compris.

        Posté par  . Évalué à 3.

        Salut,

        je ne sais pas comment le faire svp me faire ce script

        Non, personne ne va pas le faire à ta place, désolé. :)

        Si c'est un exercice de cours, lis le cours, commence à faire un début de script à partir des pseudo-codes qui t'ont déjà été proposés. En gros, fais un effort.

        Si c'est un problème d'entreprise, prépare le chèque et annonce le prix, il y a plein de bonnes âmes qui sauront te répondre si ça vaut le coup.

        Matricule 23415

      • [^] # Re: Moi yapatouh compris.

        Posté par  . Évalué à 2. Dernière modification le 26 février 2017 à 11:10.

        tant que la valeur de la col1 est la meme
        faire la difference entre valeurs de col2 dans l'ordre indiqué (val2-val1; val3-val2,…etc) si la diff est > 1 je dois compter cette occurence
        mon script doit compter combien de fois ya de valeur > 1 dans l'opération de differnce

        Vu comment tu formules ta demande, je trouve que tu as fait l'essentiel du boulot: ton algorithme me paraît tout à fait clair, en tout cas bien plus que dans ta demande initiale.

        C'est la preuve que le simple fait de poser ta question intelligemment sur linuxfr a contribué à te faire progresser.

        T'as plus qu'a traduire tout ça en shell et revenir poster le résultat ici même pour que l'on puisse continuer à t'aider. ;-)

      • [^] # Re: Moi yapatouh compris.

        Posté par  . Évalué à 2.

        À priori je ne m’étais pas trompé alors.
        Merci à l’ultime puissance du café kilétounoir du matin ! *pose de Bioman Caféman* \o/

        Comme je suis très très méchant et un poil taquin je laisse quand même traîner temporairement un exemple de la chose, avant que mon dossier /tmp disparaisse dans les méandres d’une RAM tristement vide.
        http://pastebin.com/8x4WkdLf

        • [^] # Re: Moi yapatouh compris.

          Posté par  . Évalué à -1.

          es possible en awk
          merci pour tou

          • [^] # Re: Moi yapatouh compris.

            Posté par  . Évalué à 1.

            Bin oui c'est possible.

            Surtout si tu donne le début de ce que tu as fait, ou que tu paye au salaire qui va bien pour faire from scratch.

            Matricule 23415

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.