Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com
Answertopia.com

How To Guides
Virtualization
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions
Privacy Policy

  




 

 

Debian GNU/Linux Reference Guide
Prev Home Next

8.6.17 Extraire des donn�es d'un tableau contenu dans un fichier texte

Consid�rons un fichier texte DPL dans lequel tous les responsables pr�c�dents du projet Debian (DPL, Debian Project Leader) et leur date d'investiture sont list�s s�par�s par des espaces dans un tableau.

     Ian     Murdock   August  1993
     Bruce   Perens    April   1996
     Ian     Jackson   January 1998
     Wichert Akkerman  January 1999
     Ben     Collins   April   2001
     Bdale   Garbee    April   2002
     Martin  Michlmayr March   2003

AWK est fr�quemment utilis� pour extraire des donn�es � partir de ce type de tableaux.

     $ awk '{ print $3 }' <DPL                   # mois d'investiture
     August
     April
     January
     January
     April
     April
     March
     $ awk '($1=="Ian") { print }' <DPL          # DPL appel� Ian
     Ian     Murdock   August  1993
     Ian     Jackson   January 1998
     $ awk '($2=="Perens") { print $3,$4 }' <DPL # quand Perens a �t� investi
     April 1996

Des shells comme Bash peuvent aussi �tre utilis�s pour ce genre de fichiers :

     $ while read first last month year; do
         echo $month
       done <DPL
     ... m�me sortie que le premier exemple Awk

Ici, la commande de Bash read utilise les caract�res de $IFS (internal field separators, s�parateurs de champs internes) pour s�parer les lignes en mots.

Si vous changez $IFS � ":", vous pouvez traiter le fichier /etc/passwd avec le shell :

     $ oldIFS="$IFS"   # garde l'ancienne valeur
     $ IFS=":"
     $ while read user password uid gid rest_of_line; do
         if [ "$user" = "osamu" ]; then
           echo "$user's ID is $uid"
         fi
       done < /etc/passwd
     osamu's ID is 1001
     $ IFS="$oldIFS"   # remet l'ancienne valeur

(Si Awk est utilis� pour faire cela, utilisez FS=":" pour r�gler le s�parateur de champs.)

IFS est aussi utilis� par le shell pour s�parer les r�sultats de l'expansion de param�tres, de la substitution de commande, et l'expansion arithm�tique. Celles-ci ne sont pas effectu�es � l'int�rieur de guillemets simples ou doubles. La valeur par d�faut de IFS est <space>, <tab> et <newline>.

Faites attention en utilisant IFS. Des choses �tranges peuvent survenir, lorsque le shell interpr�te certaines parties du script comme entr�e.

     $ IFS=":,"                        # utilise ":" et "," come IFS
     $ echo IFS=$IFS,   IFS="$IFS"     # echo est une commande Bash
     IFS=  , IFS=:,
     $ date -R                         # une simple sortie de commande
     Sat, 23 Aug 2003 08:30:15 +0200
     $ echo $(date -R)                 # sous-shell --> entr�e vers
                                         le shell principal
     Sat  23 Aug 2003 08 30 36 +0200
     $ unset IFS                       # restaure la valeur par d�faut
     $ echo $(date -R)
     Sat, 23 Aug 2003 08:30:50 +0200

Debian GNU/Linux Reference Guide
Prev Home Next

 
 
  Published under the terms of the GNU General Public License Design by Interspire