égalité entre les valeurs d'une colonne

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   -
Bonjour,

J'ai un fichier de deux colonnes et plusieurs lignes

je veux afficher $0 si la condition ci dessous est vrai:
les valeurs de $2 sont identiques (si l'une des valeurs est différente ne rien afficher).

exemple1:
a 2
b 2
c 3
d 2
dans l'exemple1 le script ne va rien m'afficher

exemple2:
a 2
b 2
c 2
d 2
dans l'exemple2 le script va m'afficher $0 (c'est à dire toute les lignes)

Sachant que je veux stocker la condition dans une variable pour pouvoir l'utilisée aprés dans le script (exemple si la condition est vrai faire .....).

Merci par avance



A voir également:

2 réponses

Utilisateur anonyme
 
salut,

si les valeurs de la deuxième colonne sont toujours numériques, tu pourrais faire la moyenne, et si cette moyenne est égale à la dernière valeur c'est que toutes les valeurs de la colonne sont égales.

tu peux aussi arrêter la lecture du fichier dès que la valeur change.
0
poiuytreza01234567890 Messages postés 54 Date d'inscription   Statut Membre Dernière intervention  
 
oui elles sont toujours numériques. par contre ma question c'est comment le concevoir sous bash et non pas l'algo proprement dit (je sais qu'il y a plusieurs façon de faire) mais pour moi aucune des façon je ne sais faire sous bash.
surtout que le script et vachement long. c'est pourquoi je veux mettre la condition dans une variable pour pouvoir l'utiliser après.
0
Utilisateur anonyme
 
tu peux aussi arrêter la lecture du fichier dès que la valeur change, et définir une variable, dont tu testeras l'état :
test  -z "$variableResultat2laLectureduFichierquidoitEtcEtc" && echo "toutes les valeurs de la colonne #2 sont égales" || echo "les valeurs de la colonne #2 ne sont pas toutes égales"

ou le contraire, par défaut, une variable existe, qui sera supprimée (unset)
0
poiuytreza01234567890 Messages postés 54 Date d'inscription   Statut Membre Dernière intervention  
 
je vois merci
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention  
 
hello
recupérer $? dans une variable

$ more a4*
::::::::::::::
a4
::::::::::::::
a 2
b 2
c 3
d 2
::::::::::::::
a44
::::::::::::::
a 2
b 2
c 2
d 2
$ 
$ awk '{t[NR]=$0; c[$2]++} END{if(c[$2]==NR)while(++n <=NR)print t[n]; else err++; exit(err)}' a4
$ echo $?
1
$ awk '{t[NR]=$0; c[$2]++} END{if(c[$2]==NR)while(++n <=NR)print t[n]; else err++; exit(err)}' a44
a 2
b 2
c 2
d 2
$ echo $?
0
$ 
0
poiuytreza01234567890 Messages postés 54 Date d'inscription   Statut Membre Dernière intervention  
 
Merci bien !
0
poiuytreza01234567890 Messages postés 54 Date d'inscription   Statut Membre Dernière intervention  
 
Par contre moi je veux l'utilisé après pour l'objectif ci dessous:
si la condition est vrai faire quelque chose....
condition= $(awk '{t[NR]=$0; c[$2]++} END{if(c[$2]==NR)while(++n <=NR)print t[n]; else err++; exit(err)}' monFichier)
if [ "$condition"= 'true' ] faire .....
ca ne marche pas !
0
Utilisateur anonyme
 
dans ce cas, awk retourne un code d'état égal à err, qui est une valeur numérique comprise entre 0 (succès) et 255.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention  
 
awk '{t[NR]=$0; c[$2]++} END{if(c[$2]==NR)while(++n <=NR)print t[n]; else err++; exit(err)}' monFichier
condition=$?
if [ $condition -eq 0 ] faire ..... 
0
poiuytreza01234567890 Messages postés 54 Date d'inscription   Statut Membre Dernière intervention  
 
ah ok!
Merci bcp
0