Partage
  • Partager sur Facebook
  • Partager sur Twitter

Interpolation de valeurs dans un fichier

    10 mai 2021 à 23:57:17


    Bonjour,
    J'ai un fichier contenant deux colonnes :

    12.050 .0000001617893
    12.149 .0000001560011
    12.248 .0000001521674
    12.348 0
    12.449 0
    ...

    Et j'ai des valeurs de références qui commencent à 12.020, et avancent de 0.150 :

    12.020
    12.170
    12.320
    12.470
    ...


    Tout en gardant les valeurs de la colonne 2, j'aimerais juste que les valeurs de la colonne 1 du fichier soient remplacées par les valeurs de référence les plus proche :

    12.050 sera remplacé par 12.020
    12.149 par 12.170
    12.248 par 12.320
    12.348 par 12.320
    12.449 par 12.470
    ...


    Sauriez-vous comment faire ?
    J'ai essayé avec cette boucle mais ce n'est pas précis parce que les valeurs qui ne sont pas dans le pas de 0.150 sont oubliées :

    for ((i=1202; i <= 2207; i += 15))
     
    		do 
    		    alt=$(echo "scale=3; ${i}/100" | bc)	       # création valeur de référence
    		    echo $alt  >> tab_$i                                # ecriture dans un fichier
                        fic2=tab_$i
                        awk -vp=10  'NR==FNR{arr[int($1*p)/p]++;next} (int($1*p)/p) in arr' {$fic2,$fichier}  >> AvAMA_$i     # comparaison valeur de réf/valeur du fichier
                        col2=$(awk '{ print $2 }' AvAMA_$i)               # selection colonne 2 à garder
     
                        echo $alt $col2 >> fichier_final
     
                        rm tab_$i AvAMA_$i
     
     
            done


    Et créer des fichiers pour des opérations intermédiaires n'est pas très malin j'imagine...

    -
    Edité par GiLlgm 10 mai 2021 à 23:59:13

    • Partager sur Facebook
    • Partager sur Twitter
      11 mai 2021 à 0:27:24

      dans un contexte ordonné (le fichier (sur sa première colonne) et les valeurs de référence sont triés numériquement) :

      Si (refPrécédente - valCol1) < (valCol1 - refSuivante)
      alors
         valCol1 = refPrécédente
      autreSi (refPrecedente - valCol1) > (valCol1 - refSuivante)
      alors
         valCol1 = refSuivante
      autreSi
         valCol1 == refPrecedente
      alors
         valCol1 = refPrecedente
      autreSi
         valCol1 == refSuivante
      alors
         valCol1 = refSuivante
      finSi

      ?

      -
      Edité par dantonq 11 mai 2021 à 0:29:05

      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

      Interpolation de valeurs dans un fichier

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown