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.16 Extrahieren von Daten aus Tabellen in Textdateien

Sei DPL der Name einer Textdatei, in welcher alle vorherigen Debian-Projektleiter mit Namen und Einf�hrungsdatum, durch Freizeichen getrennt, aufgef�hrt sind.

     Ian     Murdock   August  1993
     Bruce   Perens    April   1996
     Ian     Jackson   Januar  1998
     Wichert Akkerman  Januar  1999
     Ben     Collins   April   2001
     Bdale   Garbee    April   2002
     Martin  Michlmayr M�rz    2003

Awk wird oft benutzt, um Daten aus dieser Art von Datei zu extrahieren.

     $ awk '{ print $3 }' <DPL                   # Monat des Beginns
     August
     April
     Januar
     Januar
     April
     April
     M�rz
     $ awk '($1=="Ian") { print }' <DPL          # Vorname Ian
     Ian     Murdock   August  1993
     Ian     Jackson   Januar  1998
     $ awk '($2=="Perens") { print $3,$4 }' <DPL # wann fing Perens an
     April 1996

Shells wie Bash sind ebenfalls in der Lage, Dateien dieser Art auszulesen:

     $ while read Vorname Nachname Monat Jahr; do 
         echo $Monat
       done <DPL
     ... selbe Ausgabe wie beim ersten Awk Beispiel

Das eingebaute read Kommando verwendet die Zeichen in $IFS (interne Feld-Separatoren), um Zeilen in W�rter aufzuteilen.

Wenn IFS auf ":" gesetzt wird, kann /etc/passwd leicht mit der Shell ausgelesen werden:

     $ altIFS="$IFS"   # alten Wert sichern
     $ IFS=":"
     $ while read Benutzer Passwort uid gid Zeilenrest; do
         if [ "$Benutzer" = "osamu" ]; then 
           echo "$Benutzer's ID ist $uid"
         fi
       done < /etc/passwd
     osamu's ID ist 1001
     $ IFS="$altIFS"   # Wert zur�cksetzen

(Wenn Awk dazu verwendet wird, so wird der Spaltentrenner mit FS=":" angegeben.)

IFS wird auch von der Shell benutzt, um die Ergebnisse von Parameterauswertungen, Kommando-Substitutionen und arithmetischen Auswertungen aufzuteilen. Dies geschieht nicht innerhalb von doppelten oder einfachen Anf�hrungszeichen. Der Standardwert von IFS sind die Werte <Freizeichen>, <Tabulator> und <neue Zeile>.

Man muss bei der Verwendung von IFS-Tricks vorsichtig sein. Eigenartige Dinge k�nnen geschehen, wenn die Shell Teile eines Skripts als Eingabe interpretiert.

     $ IFS=":,"                        # ":" und "," seien Feldtrenner
     $ echo IFS=$IFS,   IFS="$IFS"     # echo ist ein Bash Kommando
     IFS=  , IFS=:,
     $ date -R                         # nur eine Kommandoausgabe
     Sat, 23 Aug 2003 08:30:15 +0200
     $ echo $(date -R)                 # Untershell --> Eingabe der Haupt-Shell
     Sat  23 Aug 2003 08 30 36 +0200
     $ unset IFS                       # zur�cksetzen von IFS auf den Standardwert
     $ 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