Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/11/2007, à 15:58

B@rtounet

Script tableau

Bonjour je cherche à  mettre en place un tableau selon un script shell...

Les bases:

j'ai deux fichiers texte:

dans fichier 1 j'ai par exemple:
windowsxp
linux
windows2000


dans fichiers 2 j'ai:
10%
20%
30%

même nombre de ligne dans les deux fichiers

j'aimerais avoir en résultats un tableaux de type:
[OS]               [%]
Windowsxp      10%
linux               20%
windows2000   30%

Si vous pouviez me donner quelques pistes...

Hors ligne

#2 Le 21/11/2007, à 16:51

abetsic

Re : Script tableau

Salut,

Personnellement j'oublie toujours la syntaxe pour faire des tableaux en bash et je me rabat sur le man de bash (man bash dans une console).
pour connaitre le nombre de ligne de ton fichier tu peux utiliser wc

Sinon j'ai vu récemment un exemple pour traiter les lignes d'un fichier, c'est quelque chose du genre

cat ton_fichier | while read line do
  echo $line
done

Sinon tu peux utiliser sed pour afficher une certaine ligne... bref tu as beaucoup de solutions possibles.

Hors ligne

#3 Le 21/11/2007, à 20:28

B@rtounet

Re : Script tableau

j'ai fait comme ca si ca vous interesse

suse1:~ # vi /usr/sbin/vminfo
#
#Xen Virtual Machine Information  by Antony MARTINEAU.
#
#
#
#
namelist="/home/antony/namelist"
reslist="/home/antony/reslist"

                                        cat /etc/xen/vm/*|grep "name"|cut -d'"' -f2 > $namelist
                                        cat /etc/xen/vm/*|grep "#_r"|cut -d'"' -f2 | cut -d"#" -f2 | sed 's/_//' | sed 's/_/ /' |sed 's/_/ /' | sed 's/_/ /'| sed 's/_/ /' > $reslist

                                        lines=$(cat $namelist | wc -l)
                                        if [ -z $lines ]; then
                                                lines=1
                                        fi

                                        for i in `seq 1 $lines`
                                        do
                                                vmname=$(cat $namelist | awk 'NR ==  '$i' {print;}')
                                                vmres=$(cat $reslist | awk 'NR ==  '$i' {print;}')



                                        #echo "$vmname   $vmres"
                                        #echo $vmname|awk '{print $1}'|column -t ; echo $vmres|awk '{print $1,$2,$3,$4}'|column -t

                                        tableau="$vmname"
                                        tableau[1]="$vmres"

                                        echo ${tableau[*]}

                                        done

                                        rm -f $namelist
                                        rm -f $reslist

Hors ligne

#4 Le 21/11/2007, à 21:26

abetsic

Re : Script tableau

Tu n'es pas obligé de faire cat ton_fichier | wc -l tu peux directement faire wc -l ton_fichier wink

Bon j'avoue je fais souvent comme toi, mais j'ai remarqué que tu le faisais également pour awk, grep... qui peuvent aussi prendre le nom du fichier en argument.
Ceci étant dit je trouve que l'écriture avec le pipe améliore la lisibilité du script, c'était juste au cas o๠tu voudrais épargner quelques une de tes touches la prochaine fois smile

Et j'ai même appris quelque chose dans ton code : Je ne savais pas qu'on pouvait scinder une commande awk en deux parties pour mettre une variable entre les deux paires d'apostrophes (awk 'NR ==  '$i' {print;}'). Je suppose que c'est vrai pour les commandes sed également ?

Hors ligne

#5 Le 22/11/2007, à 13:48

Alain.g

Re : Script tableau

n'aurait-il pas été plus simple de faire quelque chose comme :

IFS=$'\n'
tabname=(`cat $namelist`)
tabres=(`cat $reslist`)

for ((i=0;i<=${#tabname[*]};i++))
do echo "${tabname[$i]} ${tabres[$i]}"
done

?
(en Bash)

Dernière modification par Alain.g (Le 22/11/2007, à 13:49)


Xubuntu Karmic !

Hors ligne