#!/bin/bash

#########################################################
# Auteur : Yassine BELMEHEL
# Date modification : 30/04/2009
# MA VERSION DE BASH :
# GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)
# Copyright (C) 2007 Free Software Foundation, Inc.
#########################################################

#Modification pour gerer les nombres reels.
#Bash ne gere pas nativement les nombres reels donc contournement par des combinaisons de commandes (tr, awk, print)
#Nombres entiers toujours geres

# On verifie si le fichier existe
	if [ $# -lt 1 ]
	then
		echo "Il faut donner un nom de fichier en argument"
		exit
	fi

	if !(test -f $1)
	then
		echo "Fichier $1 inconnu !"
		exit
	fi

# on efface l'ecran
	tput clear

# on commence par faire une premiere passe pour
# isoler le max et le min. On suppose que l'entree
# est constituee d'entiers strictement positifs.
	min=0
	max=0
	i=0
	echo "------Fichier en entree: $1-------------"
	cat < $1 | while true
	do
	read ligne

		# traiter la ligne
		if [ "$ligne" = "" ]; then break; fi
		one=`echo $ligne | cut -d " " -f 1`
		two=`echo $ligne | cut -d " " -f 2`
	
		if [ $i -eq 0 ] # Permet d'initialiser min et max avec les valeurs de la premiere ligne de la matrice
		then
			max=$two
			min=$one
			i=$((i+12)) # Pour que la condition ne soit plus vérifiée
		fi

		if [ $one \> $max ]
		then
			max=$one
		fi
	
		if [ $two \> $max ]
		then
			max=$two
		fi

		if [ $one \< $min  ]
		then
			min=$one
		fi

		if [ $two \< $min ]
		then
			min=$two
		fi

		# on ecrit le max et le min dans un fichier pour les recuperer apres la boucle
		echo "$max $min" > /tmp/bidon
	done
	

# On effectue la deuxieme passe
# on commence par recuperer le max et le min d'apres /tmp/bidon
	max=`cat /tmp/bidon |cut -d " " -f 1`
	min=`cat /tmp/bidon |cut -d " " -f 2`
	
	

# on reprend
	sommecolonne1=0
	sommecolonne2=0
	nbval=0
	
	cat < $1 | while true
	do
	read ligne

		# traiter la ligne
		if [ "$ligne" = "" ]; then break; fi
		one=`echo $ligne | cut -d " " -f 1`
		two=`echo $ligne | cut -d " " -f 2`
		
		#traitement (awk) specifique pour les nombres réels (transformation de la virgule en point
		#le temps du calcul) Les calculs suivent utilisent cette meme methode.
		echo $(echo $ligne | tr ',' '.' | awk '{print $1" "$2" "$1+$2}' | tr "." ",") "$min $max"
		
		# calcul des sommes par colonnes + nombre de lignes donc de valeurs
		nbval=$((nbval+1))
		
		sommecolonne1=$sommecolonne1" "$one
		sommecolonne1=$(echo $sommecolonne1 | tr ',' '.' | awk '{print $1+$2}' | tr "." ",")

		sommecolonne2=$sommecolonne2" "$two
		sommecolonne2=$(echo $sommecolonne2 | tr ',' '.' | awk '{print $1+$2}' | tr "." ",")
		
		echo "$sommecolonne1 $sommecolonne2 $nbval" > /tmp/bidon
	done
	
	#recupération de données pour calculer les moyennes
	sommecolonne1=`cat /tmp/bidon |cut -d " " -f 1`
	sommecolonne2=`cat /tmp/bidon |cut -d " " -f 2`
	nbval=`cat /tmp/bidon |cut -d " " -f 3`
	
	#Traitement specifiques car nombres reels
	sommecolonne1=$sommecolonne1" "$nbval
	moyenne1=$(echo $sommecolonne1 | tr ',' '.' | awk '{print $1/$2}' | tr "." ",")
	
	sommecolonne2=$sommecolonne2" "$nbval
	moyenne2=$(echo $sommecolonne2 | tr ',' '.' | awk '{print $1/$2}' | tr "." ",")
	
	#Affichage des moyennes a la fin du traitement de la matrice
	echo "La moyenne de la première colonne vaut : " $moyenne1
	echo "La moyenne de la deuxième colonne vaut : " $moyenne2
