Exclure une valeur d'un traitement dans une condition
Résolu
poiuytreza01234567890
Messages postés
54
Date d'inscription
Statut
Membre
Dernière intervention
-
poiuytreza01234567890 Messages postés 54 Date d'inscription Statut Membre Dernière intervention -
poiuytreza01234567890 Messages postés 54 Date d'inscription Statut Membre Dernière intervention -
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:
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
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
A voir également:
- Exclure une valeur d'un traitement dans une condition
- Excel cellule couleur si condition texte - Guide
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Traitement de texte gratuit - Guide
- Ce traitement de texte gratuit et léger est parfait pour remplacer Word, même sur un vieux PC - Guide
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
5 réponses
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
Je reprends ce que tu dis, de manière claire :
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.
a=min(col2) b=min(col3) si b<a, alors var=vraic'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.
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 ......
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 ......
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)
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)
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
à 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 ......