GNU file utilities

ArticleCategory

UNIX Basics

AuthorImage:[]

[Foto del Autor]

TranslationInfo:[]

original in es Manuel Muriel Cordero

en to de Katja Socher

AboutTheAuthor:[]

Manuel Muriel Cordero studiert an der Statistik- und Informatikfakult�t der Universit�t von Sevilla.

Abstract:[]

Der vorhergehende Artikel in dieser Serie (Grndlegende UNIX Befehle) vermittelte einen allgemeinen �berblick �ber Linux. Es war eine Einf�hrung in die Linuxelemente, um Grundf�higkeiten zu erlangen und das Betriebssystem zu verwalten, aber der Benutzer m�chte vielleicht die normale Menge von Unixbefehlen erlernen. Durch Benutzen dieser Befehle und der Shell kann man ein sehr effizientes Datei- und Systemmanagement erreichen. Dieser Artikel handelt von diesen fortgeschrittenen, obwohl grundlegenden, Befehlen.

ArticleIllustration:[]

[Ilustracion]

ArticleBody:[]

Einleitung: der Unixweg zu arbeiten

Vor der Beschreibung der Befehle sollte der Leser einige Fakten �ber ihre Geschichte kennen. Kem Thompsom und Dennis Ritchie wollten, als sie zu Beginn der 70er Unix entwickelten, ein Betriebssystem entwickeln, um das Leben der Programmierer zu erleichtern. Sie entschieden, da� es der beste Weg w�re, um dieses Ziel zu erreichen, eine kleine Anzahl einfacher Werkzeuge zu definieren, die extrem gut in einigen spezialisierten Aufgaben sind. Kompliziertere Aufgaben k�nnten durch das Verbinden dieser Werkzeuge ausgef�hrt werden, durch Benutzen der Ausgabe des einen f�r die Eingabe des anderen.

Die Idee, Informationen auszutauschen , wird �ber den Standard Input und Output (Bildschirm und Tastatur) realisiert. Aufgrund der Existenz von Pipes und Umleitungen (gesehen im vorhergehenden Artikel) ist es m�glich, Befehle miteinander zu verbinden.

Es l��t sich mit einem Beispiel sehr leicht demonstrieren. Ein Benutzer schreibt:

$ who | grep pepe

who und grep sind zwei getrennte Programme, zusammengef�gt durch die pipe "|" . who zeigt eine Liste mit allen im Moment eingeloggten Benutzern auf dem Computer. Eine typische Ausgabe k�nnte etwa so aussehen:

$ who
manolo	tty1	Dec 22	13:15
pepe	ps/2	Dec 22	14:36
root	tty2	Dec 22	10:03
pepe	ps/2	Dec 22	14:37

Die Ausgabe setzt sich aus 4 Feldern, die durch Tabulatoren voneinander getrennt sind, zusammen. Die Felder sind der Benutzername (login), das Loginterminal, das Datum und die Zeit der Verbindung.

"grep pepe" sucht nach Zeilen, die die Zeichenkette "pepe" enthalten.

Und die Ausgabe lautet:

$ who | grep pepe
pepe	ps/2	Dec 22	14:36
pepe	ps/2	Dec 22	14:37

Vielleicht m�chtest du etwas einfacheres, als zu wissen, ob jemand eingeloggt ist, oder nicht. Du kannst die Anzahl der in dem Moment benutzten Terminals durch Benutzen des Programms wc �berpr�fen.

wc ist ein Zeichen-, Wort- und Zeilenz�hler. In diesem Fall m�chten wir nur die Anzahl der Zeilen wissen und benutzen die Option -l

$ who | wc -l
	4
$ who | grep pepe | wc -l
	2

4 Leute sind insgesamt eingeloggt und pepe ist an 2 Termianls eingeloggt

Wenn wir jetzt pr�fen, ob antonio eingeloggt ist

$ who | grep antonio | wc -l
	0

antonio ist nicht eingelogg

Der Anfang der GNU-utils

Richard Stallman, der Gr�nder des GNU Projekts, brachte die Diskussion �ber die Steuerung und Kontrolle der wenigen gro�en Softwarekonzerne auf, die verhinderten, da� die Informatik nat�rlich wuchs. Nach der Entwicklung des Emacs Editors am MIT mi�fiel ihm die Tatsache sehr, da� gro�e kommerzielle Firmen seine Arbeit nahmen und propriet�re Versionen daraus machten. Mit dieser Situation konfrontiert entschied er, ein Projekt zu starten, bei dem der Quellcode der Software f�r jedermann verf�gbar ist. Das war GNU. Das langfristige Ziel war es, ein ganzes Open-Source Betriebssystem zu schreiben. Die ersten Schritte waren eine neue Open Source Version von Emacs und ein C compiler (gcc) sowie einige typische Werkzeuge f�r Unixsysteme. Diese Werkzeuge werden in diesem Artikel diskutiert.

grep

Unser erstes Beispiel zeigte die Hauptfunktionalit�t von grep. Jetzt wollen wir es detaillierter erl�utern

Der grundlegende Gebrauch von grep ist

$ grep [-options] pattern files

Und die am h�ufigsten benutzen Optionen sind
-n druckt die Zeilennummer vor die als passend gefundenen Zeilen (n�tzlich bei der Suche in gro�en Dateien und um genau zu wissen, wo der Treffer sich befindet)
-c zeigt die Anzahl der gefundenen Treffer an
-v sucht nach nicht-�bereinstimmenden Zeilen (sucht nach Zeilen, wo es das Muster nicht gibt)

Das Muster ist eine Gruppe von Zeichen, nach der gesucht werden soll. Wenn sich darin ein Leerzeichen befindet, dann mu� das Muster mit doppelten Anf�hrungsstrichen (") versehen werden, um eine Verwechslung zwischen Mustern und den Dateien, in denen gesucht werden soll, zu verhindern. Zum Beispiel

$ grep "Hola mundo" file.txt

Wenn wir nach Zeichenketten suchen, die Wildcards, Apostrophe, Anf�hrungszeichen oder Schr�gstriche enthalten, m�ssen sie escaped (ein backslash "\" mu� vorgestellt werden) oder in Anf�hrungsstriche gesetzt werden, um eine Substitution durch die Shell zu vermeiden.

$ grep \*\"\'\?\< file.txt
Dies findet:
Esto es una cadena chunga -> *"'?<

Regul�re Ausdr�cke

grep und andere GNU utils sind in der Lage, fortgeschrittenere Suchen durchzuf�hren. Dies ist mit regul�ren Ausdr�cken m�glich. Sie sind shell wildcards �hnlich in dem Sinne, da� sie Zeichen oder Gruppen von Zeichen ersetzen. Am Ende des Artikels unter den Quellen findest du einen Link zu einem separaten Artikel, der regul�re Ausdr�cke detailliert erkl�rt.
Einige Beispiele:

$ grep c.n
sucht nach einem Auftreten einer Zeichenkette mit c, gefolgt von irgendeinem Zeichen und t.

$ grep "[Bc]el"
sucht nach jedem Auftreten von Bel und cel.

$ grep "[m-o]ata"
findet diejenigen Zeilen, die mata, nata oder oata enthalten.

$ grep "[^m-o]ata"
Zeilen mit einer Zeichenkette, die auf ata endet und kein m,n oder o als ersten Buchstaben enth�lt.

$ grep "^Martin come"
Jede Zeile, die mit 'Martin come' beginnt. Da ^ ohne Klammern steht, ist der Anfang der Zeile gemeint, nicht eine Verneinung der Gruppe wie im vorhergehenden Beispiel.

$ grep "durmiendo$"
Alle Zeilen, die auf die Zeichenkette 'durmiendo' enden. $ steht f�r das Ende der Zeile.

$ grep "^Caja San Fernando gana la liga$"
Diejenigen Zeilen, die genau mit der Zeichenkette �bereinstimmen.

Um die spezielle Bedeutung eines dieser Zeichen zu vermeiden, m�ssen Schr�gstriche nach hinten (Backslash) gesetzt werden. Zum Beispiel:

$ grep "E\.T\."
sucht nach der Zeichenkette 'E.T.'.

Find

Dieser Befehl wird benutzt, um Dateien zu finden. Ein anderer Linuxfocusartikel erkl�rt diesen Befehl, so da� wir am besten einfach auf ihn verweisen.

cut & paste

Innerhalb von Unix werden Informationen normalerweise in ASCII Dateien Zeilenweise gespeichert und Felder mit einigen speziellen Zeichen, gew�hnlich einem Tabulationszeichen oder einem Semikolon (:), begrenzt. Ein typischer Anwendungsfall ist, einige Felder aus einer Datei zu nehmen und sie mit einer anderen zu verbinden. cut und paste k�nnen diese Arbeit machen.

La�t uns als ein Beispiel die Datei /etc/passwd mit Benutzerinformationen nehmen. Sie enth�lt 7 Felder, begrenzt durch ":". Die Felder enthalten Informationen �ber den Loginnamen, das verschl�sselte Pa�wort, die Benutzer ID, group ID, geco ( Vorname und Name ), das Home Directory f�r den Benutzer und seine bevorzugte Shell.

Hier ist ein typisches St�ck aus dieser Datei:

root:x:0:0:root:/root:/bin/bash
murie:x:500:500:Manuel Muriel Cordero:/home/murie:/bin/bash
practica:x:501:501:Usuario de practicas para Ksh:/home/practica:/bin/ksh
wizardi:x:502:502:Wizard para nethack:/home/wizard:/bin/bash

Wenn wir die Benutzer und ihre Shells zusammenbringen wollen, m�ssen wir die Felder 1 und 7 ausschneiden. La� es uns machen:

$ cut -f1,7 -d: /etc/passwd
root:/bin/bash
murie:/bin/bash
practica:/bin/ksh
wizard:/bin/bash
Die Option -f spezifiziert die Felder, die herausgeschnitten werden sollen und -d definiert den Feldseparator (per default, ohne -d, ist das das Tabulationszeichen).

Und es ist m�glich, eine Reihe von Feldern auszuw�hlen:

$ cut -f5-7 -d: /etc/passwd
root:/root:/bin/bash
Manuel Muriel Cordero:/home/murie:/bin/bash
Usuario de practicas para Ksh:/home/practica:/bin/ksh
Wizard para nethack:/home/wizard:/bin/bash

Wenn wir die Ausgabe mit '>' zu zwei verschiedenen Dateien umgeleitet haben und wir beide Ausgaben verbinden wollen, k�nnen wir den Befehl paste benutzen:

$ paste output1 output2
root:/bin/bash:root:/root:/bin/bash
murie:/bin/bash:Manuel Muriel Cordero:/home/murie:/bin/bash
practica:/bin/ksh:Usuario de practicas para Ksk:/home/practica:/bin/ksh
wizard:/bin/bash:Wizard para nethack:/home/wizard:/bin/bash

sort

La�t uns annehmen, da� wir /etc/passwd unter Benutzung des geco Feldes sortieren wollen. Um dies zu erreichen, benutzen wir sort, das Unixsortierwerkzeug.

$ sort -t: +4 /etc/passwd
murie:x:500:500:Manuel Muriel Cordero:/home/murie:/bin/bash
practica:x:501:501:Usuario de practicas para Ksh:/home/practica:/bin/ksh
wizard:x:502:502:Wizard para nethack:/home/wizard:/bin/bash
root:x:0:0:root:/root:/bin/bash

Es ist sehr leicht zu erkennen, da� die Datei sortiert wurde, wobei aber die ASCII Tabellenordung benutzt wurde. Wenn wir nicht zwischen Gro�- und Kleinschreinung unterscheiden wollen, k�nnen wir folgendes schreiben:

$ sort -t: +4f  /etc/passwd
murie:x:500:500:Manuel Muriel Cordero:/home/murie:/bin/bash
root:x:0:0:root:/root:/bin/bash
practica:x:501:501:Usuario de practicas para Ksh:/home/practica:/bin/ksh
wizard:x:502:502:Wizard para nethack:/home/wizard:/bin/bash

-t ist die Option, um einen field separator auszuw�hlen. +4 steht f�r die Anzahl der Felder, die �bersprungen werden sollen, bevor die Zeilen sortiert werden und f bedeutet Sortieren ohne Ber�cksichtigung von Gro�- und Kleinbuchstaben.

Eine viel kompliziertere Sortierung kann durchgef�hrt werden. Zum Beispiel k�nnen wir sortieren und dabei in einem ersten Schritt die Shell benutzen und danach das Sortieren mit geco fortsetzen:

$ sort -t: +6r +4f /etc/passwd
practica:x:501:501:Usuario de practicas para Ksh:/home/practica:/bin/ksh
murie:x:500:500:Manuel Muriel Cordero:/home/murie:/bin/bash
root:x:0:0:root:/root:/bin/bash
wizard:x:502:502:Wizard para nethack:/home/wizard:/bin/bash

Du hast eine Datei mit einigen Leuten, denen du Geld geliehen hast und den Betrag des Geldes, den du ihnen gegeben hast. Nimm �deudas.txt� als ein Beispiel:

Son Goku:23450
Son Gohan:4570
Picolo:356700
Ranma 1/2:700

Wenn du wissen willst, wen du zuerst besuchen wirst, brauchst du eine sortierte Liste.
Tipp einfach

$ sort +1 deudas
Ranma 1/2:700
Son Gohan:4570
Son Goku:23450
Picolo:356700

was nicht das gew�nschte Ergebnis liefert, weil die Anzahl der Felder nicht dieselbe ist wie in der Datei. Die L�sung ist die �n� Option:
$ sort +1n deudas
Picolo:356700
Son Goku:23450
Son Gohan:4570
Ranma 1/2:700

Grundlegende Optionen f�r sort sind
+n.m springt �ber die ersten n Felder und die n�chsten m Zeichen bevor es anf�ngt, zu sortieren
-n.m beendet das Sortieren, wenn es bei dem m-ten Zeichen des n-ten Feldes angekommen ist

Das folgende sind �nderungsparameter:
-b springt �ber f�hrende Leerzeichen
-d Verzeichnissuche (nur Benutzung von Buchstaben, Zahlen und Leerzeichen)
-f ignoriert Gro�- und Kleinschreibung
-n sortiert numerisch
-r dreht die Ordnung um

wc

Wie wir zuvor gesehen haben, ist wc ein Zeichen-, Wort- oder Zeilenz�hler. Die Defaultausgabe enth�lt die Anzahl der Zeilen, Worte und Zeichen der Eingabedatei(en).

Der Ausgabetyp ist mit den folgenden Optionen modifizierbar

-l nur Zeilen
-w zeigt nur die Wortanzahl
-c gibt nur die Anzahl der Zeichen aus

Vergleichswerkzeuge : cmp, comm, diff

Manchmal m�ssen wir die Unterschiede zwischen 2 Versionen derselben Datei kennen. Dies wird besonders beim Programmieren benutzt, wenn verschiedene Leute an demselben Projekt arbeiten und daher Quellcode ver�ndern. Um die �nderungen von einer Version zur anderen zu finden, sind diese Werkzeuge das richtige.

cmp ist der grundlegendste von ihnen. Er vergleicht 2 Dateien und findet den Platz, wo der erste Unterschied auftritt (Zeichenanzahl und Zeile des Unterschieds)

$ cmp old new
old new differ: char 11234, line 333

comm ist ein bi�chen weiter fortgeschritten. Seine Ausgabe besteht aus drei Spalten. Die erste besteht aus den einmal vorkommenden Zeilen der ersten Datei, die zweite aus den nur einmal vorkommenden Zeilen der zweiten Datei und die dritte enth�lt die in beiden Dateien vorhandenen Zeilen. Numerische Parameter erlauben das Entfernen einiger dieser Spalten. -1, -2 und -3 sagen comm, die erste, zweite oder dritte Spalte nicht anzuzeigen. Dieses Beispiel zeigt die Zeilen, die nur in der ersten Datei vorkommen sowie die Zeile, die gleich sind:

$ comm -2 old new

Zuletzt ist da diff. Es ist ein wichtiges Werkzeug f�r fortgeschrittene Programmierprojekte. Wenn du schon mal einen Kernel zum Kompilieren heruntergeladen hast, wei�t du, da� du den Quellcode des neuen herunterladen kannst oder den Patch f�r die vorherige Version, der viel kleiner ist. Dieser Patch wirde mit diff erzeugt. Dieses Werkzeug kann Editorbefehle benutzen (vi, rcs), um die Dateien identisch zu machen. Dies gilt auch f�r Verzeichnisse und die Archive, die sie enthalten. Der Anwendungsfall ist ganz offentsichtlich: du l�dst weniger Quellcode herunter (nur die �nderungen), du h�ngst den Patch an und kompilierst. Ohne Parameter spezifiziert die Ausgabe in diesen Formaten wie �nderungen zu machen sind auf die Weise, da� das erste gleich zum 2. wird, mit vi Befehlen .

$ diff old new
3c3
< The Hobbit
---
> The Lord of the Rings
78a79,87
>Three Rings for the Elven-kings under the sky,
>Seven for the Dwarf-lords in their halls of stone,
>Nine for Mortal Men doomed to die,
>One for the Dark Lord on his dark throne
>In the Land of Mordor where the Shadows lie.
>One Ring to rule them all, One Ring to find them,
>One Ring to bring them all and in the darkness bind them
>In the Land of Mordor where the Shadows lie.

3c3 bedeutet in Zeile 3, drei Zeilen m�ssen ge�ndert werden, wobei "The Hobbit" entfernt und durch "The Lord of the Rings" ersetzt wird. 78a79,87 bedeutet, da� du neue Zeilen von Zeile 79 bis 87 einf�gen mu�t.

uniq

uniq ist ein Redundanzs�uberer. Wenn wir zum Beispiel wissen wollen, welche Leute gerade mit ihren Computern verbunden sind, m�ssen wir die Befehle who und cut benutzen.

$ who | cut -f1 -d' '
root
murie
murie
practica

Aber die Ausgabe ist nicht gut. Wir m�ssen den 2.Eintrag f�r den Benutzer murie l�schen. Und das hei�t

$ who | cut -f1 -d' ' | sort | uniq
murie
practica
root

Die Zeichenoption -d' ' bedeutet, da� der fields separator ein Leerzeichen ist, weil die Ausgabe von who dieses Zeichen anstelle des Tabulatorzeichens benutzt .

uniq vergleicht nur aufeinanderfolgende Zeilen. In unserem Fall erschienen die 2 "murie" hintereinander, aber es h�tte in anderer Reihenfolge sein k�nnen. Es ist deshalb eine gute Idee, die Ausgabe zu sortieren, bevor der Befehl uniq angewendet wird.

sed

sed ist einer der besondersten Unixwerkzeuge. Es steht f�r stream editor. Normalerweise werden beim Editieren interaktiv die �nderungen, die der Benutzer m�chte, akzeptiert. sed erlaubt es uns, kleine shell-Skripte, �hnlich zu Batchdateien in MS-Dos zu erzeugen. Es gibt uns die F�higkeit, den Inhalt einer Datei ohne Benutzerinteraktion zu �ndern. Die F�higkeiten des Editors sind sehr vollst�ndig und tiefer in das Thema einzusteigen w�rde den Artikel zu lang werden lassen. Deshalb gibt es nur eine kurze Einf�hrung und dem interessierten Benutzer bleiben die man und info Seiten.

sed wird normalerweise so aufgerufen:

$ sed 'command' files

Nimm als Beispiel eine Datei, wo wir jedes Auftauchen von "Manolo" mit "Fernando" ersetzen wollen. La� es uns machen:

$ sed 's/Manolo/Fernando/g' file

Und es gibt durch die Standardausgabe die modifizierte Datei zur�ck. Wenn du das Ergebnis behalten willst, leite es einfach mit ">" um.

Viele Benutzer werden da den gew�hnlichen suche & ersetze vi Befehl erkennen. Tats�chlich sind viele ":" Befehle (solche, die ex aufrufen) Befehle von sed.

Normalerweise sind sed Anweisungen aus ein oder zwei Adressen (zum Ausw�hlen der Zeilen) und dem Befehl zum Ausf�hren zusammengesetzt. Die Adresse k�nnte eine Zeile sein, eine Reihe von Zeilen oder ein Muster.
Die am meisten benutzten Befehle sind:

Befehl	  Aktion
-------   ------
a\         f�gt die Zeile hinter der adressierten Zeile in die Eingabe hinzu
c\         �ndert die adressierten Zeilen, schreibt in die Zeile
d          l�scht die Zeile(n)
g          macht globale Substitutionen der Muster anstatt nur das erste
           Auftreten zu ersetzen
i\         f�gt Zeilen nach den adressierten Zeilen hinzu
p          druckt die aktuelle Zeile, benutzt sogar die -n Option
q          beendet(quit), wenn es die adressierte Zeile erreicht 
r file     liest die Datei, h�ngt den Inhalt an die Ausgabe an
s/one/two  ersetzt die Zeichenkette "one" mit der Zeichenkette "two"
w file     kopiert die aktuelle Zeile in eine andere Datei
=          druckt die Zeilennummer
! command  wendet den Befehl auf die aktuelle Zeile an

Bei der Benutzung von sed kannst du spezifizieren, auf welche Zeilen oder welche Reihe von Zeilen gehandelt werden werden soll:

$ sed '3d' file
l�scht die dritte Zeile aus der Datei

$ sed '2,4s/e/#/' file
ersetzt das erste Auftreten des Zeichens character "e" mit dem Zeichen "#" in den Zeilen 2 bis 4 (einschlie�lich der beiden).

Zeilen, die eine Zeichenkette enthalten, k�nnen durch Benutzen von regul�ren Ausdr�cken, wie oben beschrieben, ausgew�hlt werden. Zum Beispiel l�scht

$ sed '/[Qq]ueen/d' songs
jede Zeile, die das Wort "Queen" oder "queen" enth�lt.

Es ist sehr leicht, leere Zeilen aus einer Datei durch das Benutzen von Mustern zu l�schen

$ sed '/^$/d' file
obwohl diejenigen Zeilen, die Leerzeichen enthalten, nicht gel�scht werden. Um dies zu erreichen, mu�t du ein ein bi�chen erweitertes Muster benutzen
$ sed '/^ *$/d' file
wobei das "*" Zeichen jedes Auftreten des vorherigen Zeichens, in diesem Fall " " (Leerzeichen) , bedeutet.

$ sed '/InitMenu/a\
> the text to append' file.txt
Dieses Beispiel sucht eine Zeile, die die Zeichenkette "InitMenu" enth�lt und f�gt dahinter eine neue Zeile ein. Dieses Beispiel arbeitet nur wie gezeigt mit bash oder sh als Shell. Du tippst bis a\ , dann dr�ckst du die Returntaste und tippst den Rest.

Tcsh expandiert newlines innerhalb von Anf�hrungszeichen auf andere Weise. Deshalb mu�t du in tcsh einen doppelten Backslash benutzen:

$ sed '/InitMenu/a\\
? the text to append' file.txt
Das ? kommt von der Shell genauso wie das > in dem bash Beispiel.

awk

Und schlie�lich: awk. Sein au�ergew�hnlicher Name kam von den Namen der urspr�nglichen Entwickler: Alfred Aho Peter Weinberger und Brian Kernighan.

Das awk Programm ist eines der interessantesten unter den Unix utilities. Es ist ein weit entwickletes und komplexes Werkzeug, das erlaubt, von der Kommandozeile eine gro�e Anzahl verschiedener Aktionen auszuf�hren.

Es sollte angemerkt werden, da� awk und sed die Schl�sselst�cke zu komplexeren Shellskripten sind. Es ist wirklich eindrucksvoll was man ohne C oder jede andere kompilierte Sprache tun kann. Das SlackWare Linuxdistribution Setup sowie viele CGI Webprogramme sind einfach Shell Skripte.

Heutzutage werden die Kommandozeilenwerkzeuge links liegengelassen, da sie zu alt sind f�r die aktuelle Fensterverwaltung und mit der Ankunft von PERL wurden viele Shellskripte durch Perlskripte ersetzt. Es sieht vielleicht so aus, als w�rden diese Kommandowerkzeuge vergessen. Jedoch sagt meine eigene Erfahrung, da� viele Anwendungen mit ein paar Zeilen im Shellskript gemacht werden k�nnen (einschlie�lich eines kleinen Datenbankmanagers). Davon abgesehen kannst du sehr produktiv sein, wenn du wei�t, wie man diese Befehle und die Shell benutzt.

Wenn du die M�chtigkeit von awk und sed verbindest, kannst du Dinge sehr schnell ausf�hren, die normalerweise mit einem kleinen Datenbankmanager und einer Tabellenkalkulation gemacht werden.

Nimm eine Rechnung, wo du die Artikel, die du gekauft hast, findest, wieviele St�cke von jedem und ihre Preise pro Produkt. La� uns diese Datei "sales" nennen:

oranges 	5	250
peras   	3	120
apples  	2	360

Es ist eine Datei mit drei Feldern, mit dem Tabulator als Feldseparator. Jetzt m�chtest du ein 4.Feld definieren mit dem Gesamtpreis pro Produkt.

$ awk '{total=$2*$3; print $0 , total }' sales
oranges	6	250	1250
peras	3	120	360
apples	2	360	720

total ist die Varable, die das Produkt der Werte, die im 2. und 3. Feld gespeichert werden, enth�lt. Nach der Berechnung wird die gesamte Eingabe und der Gesamtwert gedruckt.

awk ist beinahe eine eigene Programmierumgebung, sehr gut geeignet f�r automatisiertes Arbeiten mit Informationen von Textdateien. Wenn du an diesem Werkzeug interessiert bist, ermuntere ich dich, mehr dar�ber zu lernen, durch Lesen seiner man und info Seiten.

Die Shellskripte

Shellskripte sind Systembefehlsabfolgen, gespeichert in einer Datei, um ausgef�hrt zu werden.

Shellskripte sind �hnlich zu Batchdateien unter DOS, aber m�chtiger. Sie erlauben Benutzern, ihre eigenen Befehle zu erschaffen, einfach durch Kombination von bereits existierenden.

Shellskripte sind nat�rlich in der Lage, Parameter anzunehmen. Sie sind in Variablen $0 (f�r den Befehls-/Skriptnamen), $1, $2, ... hoch bis zu $9 gespeichert. Auf alle Befehlszeilenparameter kann mit $* verwiesen werden.

Jeder Texteditor kann Shellskripte erzeugen. Um ein Skript auszuf�hren, tipp einfach:

$ sh shell-script
Oder, viel besser, du kannst die Ausf�hrungserlaubnis mit
$ chmod 700 shell-script
erteilen und nur durch Tippen des Namens ausf�hren:
$ shell-script

Wir beenden hier diesen Artikel und verschieben die Diskussion �ber Shellskripte auf sp�ter. Der n�chste Artikel wird in die beiden bekanntesten Unixeditoren einf�hren: vi & emacs. Jeder Linuxbenutzer sollte sie gut kennen.

Quellen

Dies ist ein Einf�hrungsartikel und die Leser k�nnten weitere Details durch das Lesen anderer Linuxfocusartikel lernen:

Bibliografie

Weiterf�hrende Literatur: