égalité entre les valeurs d'une colonne

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 28/01/2013 à 13:52
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013 - 28 janv. 2013 à 16:06
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
28 janv. 2013 à 14:05
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 jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
28 janv. 2013 à 14:37
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
28 janv. 2013 à 14:58
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 jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
28 janv. 2013 à 15:00
je vois merci
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
28 janv. 2013 à 14:53
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 jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
28 janv. 2013 à 15:00
Merci bien !
0
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
28 janv. 2013 à 15:08
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
28 janv. 2013 à 15:48
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 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
28 janv. 2013 à 15:48
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 jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
28 janv. 2013 à 15:52
ah ok!
Merci bcp
0