Exclure une valeur d'un traitement dans une condition

Résolu/Fermé
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013 - 28 janv. 2013 à 18:00
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013 - 29 janv. 2013 à 16:55
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

Utilisateur anonyme
29 janv. 2013 à 15:44
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
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par poiuytreza01234567890 le 29/01/2013 à 16:26
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
28 janv. 2013 à 18:20
Salut,

C'est quoi "i" ?
0
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
28 janv. 2013 à 18:47
c'est le minimum de la colonne 3 dans l'exemple que j'ai donner elle est de 2
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
28 janv. 2013 à 18:55
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
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
28 janv. 2013 à 19:08
var c'est mincol2 et pas 3
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
28 janv. 2013 à 19:14
Oui et alors ? mincol2 n'est pas la valeur minimale de référence ?
0
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
28 janv. 2013 à 19:16
vous voulez dire quoi par valeur minimale de référence?
0
Utilisateur anonyme
29 janv. 2013 à 00:09
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
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par poiuytreza01234567890 le 29/01/2013 à 10:13
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
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par poiuytreza01234567890 le 29/01/2013 à 10:09
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
29 janv. 2013 à 10:08
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
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par poiuytreza01234567890 le 29/01/2013 à 10:13
je voulais dire mincol3=3 et mincol2=4 (car le 2 doit être exclu lors du calcule de mincol2)
edit
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
29 janv. 2013 à 10:18
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
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
29 janv. 2013 à 10:26
Je suis d'accord.
c'est pkoi je veux exclure cette valeur du calcule lors de la condition.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
29 janv. 2013 à 16:35
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
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par poiuytreza01234567890 le 29/01/2013 à 17:16
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