Deux conditions sur un fichier de 3 colonnes

Résolu/Fermé
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013 - Modifié par poiuytreza01234567890 le 21/01/2013 à 15:35
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013 - 21 janv. 2013 à 17:46
Bonjour,

voilà, j'ai un fichier qui contient 3 colonnes
Nom1 valeur1 valeur''1
Nom2 valeur2 valeur''2
Nom3 valeur3 valeur''3
. . .
. . .
voilà ce que je veux faire:
si $2 de ligne courante=min de $2 et $3 de ligne courante=min de $3 afficher la ligne entière.

voici le script que j'ai fais:

minMin=$(cut -d" " -f2 $dirFichierInitiale | sort -n | sed '1,${1b;d}') #minimum de la troisième colonne
minMax=$(cut -d" " -f3 $dirFichierInitiale | sort -n | sed '1,${1b;d}') #minimum de la deuxième colonne
condition=$(awk -v min="$minMin" -v max="$minMax" '$2 == min $3 == max {print $0}' $dirFichierInitiale)
echo "$condition"

mais ca ne marche pas il y a une erreur de type:

awk: cmd. line:1: $2 == mini $3 == NNT {print $0}
awk: cmd. line:1: ^ syntax error .


Merci par avance pour vos corrections.


A voir également:

9 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
21 janv. 2013 à 15:38
hello
il manque un ET :
 ...'$2 == min && $3 == max {print $0}' 
0
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
21 janv. 2013 à 15:39
Merci bcp. ça marche!
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
21 janv. 2013 à 16:03
il va comparer $condition au mot true !!
en shell, true c'est non-nul et faux c'est 0
0
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
21 janv. 2013 à 16:16
Je n'ai pas bien compris!!

if [ "$condition" = true ]; then ....

pkoi il va considéré true comme un mot
c'est quoi alors true en bash?

Merci
0

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

Posez votre question
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
21 janv. 2013 à 16:26
une chaine de car. n'est pas vraie ou fausse, elle vide ou pas. si elle n'est pas vide, on peut comparer son contenu et le résultat de cette comparaison est vrai ou faux.
en numérique 0 est faux, sinon vrai.
que retourne awk ?
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 21/01/2013 à 16:36
Il ne retrouve rien justement en mettant ce que j'ai mis.
maintenant j'ai compris. Merci encore.

en fait ce que je veux faire:

si la condition est réalisé: (condition=$(awk -v min="$minMin" -v max="$minMax" '$2 == min $3 == max {print $0}' $dirFichierInitiale) )
faire le traitement machin....

j'ai essayé de mettre :
if [ awk -v min="$minMin" -v max="$minMax" '$2 == min $3 == max {print $0}' $dirFichierInitiale)=true; then faire le traitement machin break fi;
mais ca ne marche pas.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
21 janv. 2013 à 16:54
tu peux faire
condition=$(awk -v min="$minMin" -v max="$minMax" '$2 == min && $3 == max {print "true"}' $dirFichierInitiale) )
if [ "$condition" = "true" ];  then

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 21/01/2013 à 17:23
Merci. c'est vraiment gentil!
Je suis vraiment débutante en bash.

Je profite pour poser une autre question:

En python par exemple:
Je commence une boucle comme ça (à l'infini aprés je met un petit break pour sortie):
while (1=1): faire des traitements
if condition=True:
print quelquechose
break
en bash comment l'écrire ce "while (1=1)"

Merci par avance.
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 21/01/2013 à 17:46
C'est bon j'ai trouvé.
il faut mettre des espaces while [espace 1=1 espace]
ça ne marché pas car j'ai mis [1=1] et non pas [ 1=1 ]
0