Forum Programmation.shell automatisation pour soumission de job sur slurm

Posté par  . Licence CC By‑SA.
Étiquettes :
2
3
juil.
2023

bonjour,

j'effectue en ce moment (stage) des calculs sur un cluster, et je souhaite automatiser ma soumissions de job:

Pour ce faire, je dispose d'une base de donnée de la forme :

delta Re ub F maxUs xUs yUs maxUip maxPsi xPsi yPsi circulation
1.000000000000000056e-01 1.000000000000000000e+02 9.999999880255133755e-01 1.847046745021032388e+00 1.875822000151966096e+00 1.451459197325943992e-03 5.195067241032987226e+00 1.800956170626870634e-01 1.358132924334415625e-01 2.283607643238189100e-01 5.053583403732131885e+00 3.356563318232111959e-01
...

j'aimerai faire un test if sur les deux premières colonnes de chaque ligne et assigner la valeur de F lorsque le test est bon.

Mais je rencontre des difficultés pour le test..
J'ai utilisé plusieurs méthodes mais aucune ne s'est avéré fructueuse:

while read -r delta Re ub F maxUs xUs yUs maxUip maxPsi xPsi yPsi circulation; do

if [ 1 -eq "$(echo "${delta} = ${test}" | bc)" ]
then 
    echo "$F"
fi

done < "Data.txt"

..

while read -r delta Re ub F maxUs xUs yUs maxUip maxPsi xPsi yPsi circulation; do
    echo "Re = $Re"
        echo "F = $F"
        echo "delta = $delta"
    Delta=$( awk 'BEGIN{printf "%.1f\n", $delta }' )
    echo "Delta = $Delta"

    if (( $d -eq 1/10 |bc -l )); then 
    echo "$F test ok"
    fi

done < "Data.txt"

Quelqu'un pourrait il m'aider ?
Peut être n'est ce pas la bonne méthode ..? Python serait plus pertinent ?

Dans l'attente de votre réponse.

Cordialement

  • # Basherie

    Posté par  (site web personnel) . Évalué à 3.

    Si tu es plus à l’aise en Python et sous condition que le langage soit connu dans ton équipe au boulot, ça ne sert à rien de s’arracher les cheveux à faire du Bash. La lisibilité du code n’en sera que meilleure, et j’ai l’impression que c’est un peu plus pertinent dans ton contexte si ton besoin devient plus compliqué.

    Après c’est possible de faire des trucs lisibles en Bash pour la beauté de l’exercice mais moi j’ai poney.

    • [^] # Re: Basherie

      Posté par  (site web personnel) . Évalué à 2.

      En plus, slurm sait parfaitement exécuter du python, directement en script de soumission, exemple :

      #!/usr/bin/env python3
      # coding: utf-8
      #
      # slurm parameters
      #SBATCH --job-name=pytest
      #SBATCH --partition=toto
      #SBATCH --cpus-per-task=1
      #SBATCH --ntasks=8
      #SBATCH --nodes=1
      
      # actual script
      
      import os
      import sys
      import time
      
      time.sleep(2)  # let os.ENV initialize properly
      
      SLURM_ENV = ["SLURM_JOB_ID", "SLURM_NTASKS", "SLURM_NPROCS", "SLURM_SUBMIT_HOST", "SLURM_STEP_TASKS_PER_NODE", "SLURM_CPUS_ON_NODE", "SLURM_JOB_CPUS_PER_NODE"]
      
      for elt in SLURM_ENV:
          print(f"{elt}:", os.environ.get(elt))

      (et pour bash, y'a shellcheck). Je vous laisse, j'ai bouboulicorne à la piscine.

      Proverbe Alien : Sauvez la terre ? Mangez des humains !

  • # awk est un ami

    Posté par  . Évalué à 1. Dernière modification le 18 août 2023 à 11:32.

       awk '$1==$2{ print $4}' data.txt 
    

    Exemple, qui affiche F quand Re est égal à delta, à modifier selon vos besoins.

    Ca peut servir pour alimenter un xargs par exemple qui va relancer des calculs avec la liste de valeurs en entrée.

    awk '$1==$2{ print $4}' data.txt | xargs -I % script.sh %
    

    etc…

Suivre le flux des commentaires

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