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 Extraer datos de una tabla contenida en un archivo de texto

Consideremos un archivo de texto llamado DPL en donde todos los nombres de los l�deres del proyecto Debian y el d�a de su asunci�n est�n listados separados entre s� mediante espacios.

     Ian     Murdock   Agosto  1993
     Bruce   Perens    Abril   1996
     Ian     Jackson   Enero   1998
     Wichert Akkerman  Enero   1999
     Ben     Collins   Abril   2001
     Bdale   Garbee    Abril   2002
     Martin  Michlmayr Marzo   2003

A menudo, se utiliza Awk para extraer datos de este tipo de archivos.

     $ awk '{ print $3 }' <DPL                   # mes de asunci�n
     August
     April
     January
     January
     April
     April
     March
     $ awk '($1=="Ian") { print }' <DPL          # DPL llamado Ian
     Ian     Murdock   Agosto  1993
     Ian     Jackson   Enero   1998
     $ awk '($2=="Perens") { print $3,$4 }' <DPL # Cuando Perens asumi� 
     Abril 1996

Los int�rpretes de comandos como el Bash pueden tambi�n utilizarse para analizar este tipo de archivo:

     $ while read primero �ltimo mes a�o; do 
         echo $mes
       done <DPL
     ... la misma salida que en el primer ejemplo Awk

En este caso, el comando incorporado read utililiza las caracteres de $IFS (separadores de campo internos, con sus siglas en ingl�s) para dividir l�neas en palabras.

Si cambian IFS a ":", puede analizar perfectamente el /etc/passwd con el shell:

     $ originalIFS="$IFS"   # guarda el valor original
     $ IFS=":"
     $ while read user password uid gid resto_de_la_l�nea; do
         if [ "$user" = "osamu" ]; then 
           echo "el ID de $user es $uid"
         fi
       done < /etc/passwd
     El ID de osamu es 1001
     $ IFS="$originalIFS"   # devuelve valor anterior

(Si utiliza Awk para hacer lo mismo, utilice FS=":" para configurar el separador de campo)

IFS tambi�n es utilizado por el int�rprete de comandos para dividir la espansi�n de par�metros, la sustituci�n de comandos y la expansi�n aritm�tica. Esto no sucede con palabras entre comillas simples o dobles. El valor predeterminado de IFS es <espacio>, <tab> y <nueva_l�nea> combinados.

Sea cuidadoso al usar estos trucos con el IFS del int�rprete de comandos. Pueden ocurrir cosas extra�as cuando el shell interpreta parte de un script como si se fuese su entrada.

     $ IFS=":,"                        # utiliza ":" y "," como IFS
     $ echo IFS=$IFS,   IFS="$IFS"     # echo es un comando del Bash
     IFS=  , IFS=:,
     $ date -R                         # simplemente la salida de un comando
     Sat, 23 Aug 2003 08:30:15 +0200
     $ echo $(date -R)                 # subshell --> entrada al shell principal
     Sat  23 Aug 2003 08 30 36 +0200
     $ unset IFS                       # volver al IFS predeterminado
     $ 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