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 Estrarre dati da un file tabella

Consideramo un file di testo chiamato DPL in cui tutti i nomi dei project leader Debian precedenti e la data di inizio della carica siano elencati in un formato con separazioni date da spazi.

     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 viene usato frequentemente per estrarre i dati da questo tipo di file.

     $ awk '{ print $3 }' <DPL                   # mese di inzio
     August
     April
     January
     January
     April
     April
     March
     $ awk '($1=="Ian") { print }' <DPL          # DPL di nome Ian
     Ian     Murdock   August  1993
     Ian     Jackson   January 1998
     $ awk '($2=="Perens") { print $3,$4 }' <DPL # Quando Perens ha iniziato
     April 1996

Anche le shell come la Bash possono essere usate per questi file:

     $ while read first last month year; do 
         echo $month
       done <DPL
     ... lo stesso output del primo esempio con Awk

Qui ilcomando interno read usa i caratteri in $IFS (internal field separators) per dividere le righe in parole.

Se cambiate IFS in ":", potete processare elegantemente /etc/passwd con la shell:

     $ oldIFS="$IFS"   # salva i vecchi valori
     $ 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"   # ripristina i vecchi valori

(Se si usa Awk per la stessa cosa, usate FS=":" per impostare il separatore di campo)

IFS viene anche usato dalla shell per dividere i risultati della espansione dei parametri, sostituzione dei comandi ed espansione aritmetica. Questi non sono possibili all'interno di parole tra virgolette, semplici o doppie. il valore predefinito di IFS � <space>, <tab>, e <newline> combinati.

Fate attenzione nell'uso di questi trucchi con IFS. Possono accadere strane cose quando la shell inetrpreta alcune parti degli script come proprio input.

     $ IFS=":,"                        # usa ":" e "," come IFS
     $ echo IFS=$IFS,   IFS="$IFS"     # echo � un Bash built-in
     IFS=  , IFS=:,
     $ date -R                         # solo l'output di un comando
     Sat, 23 Aug 2003 08:30:15 +0200
     $ echo $(date -R)                 # sub shell --> input alla shell principale
     Sat  23 Aug 2003 08 30 36 +0200
     $ unset IFS                       # riporta IFS al predefinito
     $ 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