Exclure une valeur d'un traitement dans une condition

Résolu
poiuytreza01234567890 Messages postés 57 Statut Membre -  
poiuytreza01234567890 Messages postés 57 Statut Membre -
Bonjour,

J'ai un fichier de deux 3 colonnes et de plusieurs lignes:
x 1 2
y 5 9
z 4 5
etc

je veux introduire la condition suivante:
si ($3)i < min ($2 (SAUF $2 de i) ) faire .....

Voici ce que j'ai fais:

mincol2=$(cut -d" " -f2 $InputFile | sort -n | sed '1,${1b;d}') 
condition=$(awk -v var="$mincol2" '$3 < var {print "true"}' $monFichier)
if [ "$condition" == "true" ] then ......


mais avec ce que j'ai fais, il prend en compte la valeur de $2 de i durant le calcul.
dans l'exemple de fichier que j'ai donné, il ne va rien m'afficher car 1 n'est pas inférieur à 2.

Merci

5 réponses

  1. Utilisateur anonyme
     
    awk '{
       if($3<minCol3 || !minCol3)minCol3=$3
       col2[++n]=$2
       w[n]=$0
    }
    END{
       asort(col2)
       minCol2=col2[2]
       for(i=1;i<=n;i++){
          split(w[i],A)
          if(A[2]!=minCol2 && A[3]<minCol2)print w[i]
       }
    }' tonEchantillon
    x 2 3
    1
    1. poiuytreza01234567890 Messages postés 57 Statut Membre
       
      y a t il un moyen pour mettre le if que tu a mis: (if(A[2]!=minCol2 && A[3]<minCol2)print w[i])
      à l'extérieur du awk.
      car ce que, ce que je compte faire, c'est d'ajouter un else (et ce que je vais mettre dans mon else est hyper long"
      genre :
      if ..... faire ....
      else faire ......
      0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    C'est quoi "i" ?
    0
    1. poiuytreza01234567890 Messages postés 57 Statut Membre
       
      c'est le minimum de la colonne 3 dans l'exemple que j'ai donner elle est de 2
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Il suffit alors de lui dire de ne pas s'occuper de la ligne dont le champ 3 est égal à i :

      awk '$3 != var { ... }'
      0
    3. poiuytreza01234567890 Messages postés 57 Statut Membre
       
      var c'est mincol2 et pas 3
      0
    4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Oui et alors ? mincol2 n'est pas la valeur minimale de référence ?
      0
    5. poiuytreza01234567890 Messages postés 57 Statut Membre
       
      vous voulez dire quoi par valeur minimale de référence?
      0
  3. Utilisateur anonyme
     
    Je reprends ce que tu dis, de manière claire :

    a=min(col2)
    b=min(col3)
    si b<a, alors var=vrai
    
    c'est tout.
    On ne peut pas aller plus loin.

    T'as tellement trituré le machin, je ne suis pas certain que tout cela ait encore un sens.

    On jette tout, et on recommence:
    tu nous donnes
    - un échantillon représentatif du fichier (une dizaine de lignes)
    - le résultat qui correspond à tes attentes (les lignes de l'échantillon qui correspondent)
    - et un exposé clair des raisons pour lesquelles elles correspondent.
    0
  4. poiuytreza01234567890 Messages postés 57 Statut Membre
     
    La condition est : si mincol3<mincol2 (ne pas inclure dans le calcule de mincol2 la valeur correspondante dans $2 à mincol3).

    exemple:
    $1 $2 $3
    x 2 3
    y 4 4
    z 7 8
    w 4 5

    le résultat de vérification si je met un echo $0 dans ma condition doit être:

    x 2 3

    car mincol3=3 et mincol2=4 et mincol3 doit être < mincol2 donc il y a que la ligne de x qui respecte cette condition.

    alors moi je veux stocker cette condition dans une variable pour pouvoir l'utiliser après dans mon code tel que:

    si la condition est vrai then faire un traitement ......
    0
    1. poiuytreza01234567890 Messages postés 57 Statut Membre
       
      Quand je fais comme ça:
      mincol2=$(cut -d" " -f2 $monFichier | sort -n | sed '1,${1b;d}')
      mincol3=$(cut -d" " -f3 $monFichier | sort -n | sed '1,${1b;d}')
      condition=$(awk -v var1="$mincol2" -v var2="$mincol3" '$2 != var1 && $3 < var2 {print "true"}' $monFichier)
      echo "$"condition"
      il m'affiche une ligne vide

      j'ai testé avec $3>var2 : et là il m'affiche le résultat des lignes qui ne corresponds pas à ce que je cherche. genre si je prend l'exemple de mon tableau du départ il m'affiche la ligne y et z (true, true). complétement logique. mais quand je met $3<var2 là au lieu de m'afficher la ligne de x (true) il ne m'affiche rien( une ligne vide)

      PS: true (ou "x 1 2 " si je mets $0 à la place de true)
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      le résultat de vérification si je met un echo $0 dans ma condition doit être:
      x 2 3
      car mincol3=3 et mincol2=2 et mincol3 doit être < mincol2 donc il y a que la ligne de x qui respecte cette condition.


      Relis-toi bien ! Il n'y a aucune ligne dans ton fichier qui satisfait cette condition !

      En gros, il n'y a aucun champ dans la colonne 3 qui soit inférieur au champ de la colonne 2.
      0
    3. poiuytreza01234567890 Messages postés 57 Statut Membre
       
      je voulais dire mincol3=3 et mincol2=4 (car le 2 doit être exclu lors du calcule de mincol2)
      edit
      0
    4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      et mincol2=4 (car le 2 doit être exclu lors du calcule de mincol2)

      Le problème c'est que mincol2 n'égalera jamais 4 ou autre puisque cette valeur est attribuée à 2.
      0
    5. poiuytreza01234567890 Messages postés 57 Statut Membre
       
      Je suis d'accord.
      c'est pkoi je veux exclure cette valeur du calcule lors de la condition.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    Arrête de nous faire "rustiner" !
    C'est très désagréable !

    Ouvre un nouveau sujet (celui-ci est résolu), et expose ton projet dans sa totalité, pour qu'on en ait une vision complète, et qu'on te fournisse une solution globale.
    Parce qu'on est partis, dans un précédent message, de deux colonnes, là, on est passés à trois colonnes.
    La prochaine étape, c'est quoi ? Prendre en compte les données d'un autre fichier ?

    On semble t'avoir confié une tâche bien compliquée pour ton si faible niveau en programmation.
    0
    1. poiuytreza01234567890 Messages postés 57 Statut Membre
       
      Je ne vois pas où est le fichier de deux colonnes dans ce message !!

      La tâche compliquée ou pas c'est moi qu'elle a créé. on me la pas confiée. j'ai posé des questions pour avoir des réponses ou s'abstenir pas pour juger les gens ou leur niveau, car ils le connaissent très bien.

      Merci quand même
      0