# Filter (Software)

Ein Filter ist im Bereich Softwareentwicklung und -anwendung eine (Teil-)Funktion eines Programms, die eingehende Daten nach vorgegebenen Kriterien überprüft und nur die den Kriterien entsprechenden Daten der Weiterverarbeitung zuführt bzw. in den Ausgabe-Datenstrom leitet.
In erweitertem Sinn wird unter diesem Begriff in der Terminologie unixoider Betriebssysteme auch eine Gruppe von Befehlszeilenprogrammen zusammengefasst, mittels derer eingelesene Daten nicht nur auf Teilmengen reduziert, sondern auch verändert (umgeformt, modifiziert, manipuliert, erweitert, angereichert, zusammengeführt etc.) ausgegeben werden.

## Filter als Kommandozeilenfunktion

Der Begriff des Filters stammt ursprünglich aus dem Betriebssystem UNIX, das insgesamt ein reichhaltiges Sortiment an Programmen bietet, die sich als „Filter“ einsetzen lassen: tr, sed, grep, join, awk, um nur einige wenige zu nennen. Insbesondere das unter Unix eingeführte Konzept der Pipelines eignet sich hervorragend, solche Filter zur Nachbearbeitung oder auch Auswertung von Datenbeständen einzusetzen.
Das Konzept der Filter wurde auch in andere Betriebssysteme (etwa VMS, aber auch MS-DOS und seine Abkömmlinge) übernommen, meist allerdings in, verglichen mit UNIX-artigen Systemen, deutlich geringerem Umfang.
Einschränkend sei angemerkt, dass der Begriff Filter lediglich umgangssprachlich verwendet wird und keine exakte wissenschaftliche Definition vorliegt. Was also genau ein Filter ist, und ob ein konkretes Stück Software als solcher bezeichnet werden kann, darüber kann es durchaus unterschiedliche Auffassungen geben.

### Funktionsweise

Typischerweise werden Filter in einer Pipeline oder deren Äquivalent eingesetzt, bekommen also Daten von <stdin> und geben das Resultat ihrer Verarbeitung auf <stdout>. Dies ist allerdings keineswegs zwingend erforderlich, der Input kann durchaus auch wie im Beispiel über File-I/O oder andere Wege erfolgen.

### Beispiel für Unix und Unix-ähnliche Systeme

Das Beispiel filtert aus einer Scriptdatei (KornShell-Script) den Kommentarheader bis zur ersten Nicht-Kommentar-Zeile und gibt diesen Teil des Scripts auf <stdout> aus:

### Beispiel für DOS und DOS-ähnliche

Bereits wegen des Fehlens einer RegExp-Engine kann das obige Beispiel mit nativen DOS-Kommandos nur eingeschränkt nachgebildet werden. Der folgende Befehl gibt alle Kommentarzeilen einer angegebenen Script-Datei aus, egal an welcher Stelle sie vorkommen:

## Filter in anderen Anwendungen

Allgemein im Softwarebereich sind Filter Softwarefunktionen, die Eingabedaten daraufhin überprüfen, ob sie bestimmten Filter-Kriterien entsprechen, mit dem Ziel, nur bestimmte Daten entweder zu verarbeiten/auszugeben (und andere nicht) oder umgekehrt diese nicht zu verarbeiten. Die Kriterien müssen in einer für die Filter-Routine festgelegten Form (Syntax) vorliegen, um interpretiert bzw. verarbeitet werden zu können, ebenso muss festgelegt sein, ob sie als Ausschluss- oder als Einschlusskriterien wirken sollen.

### Beispiele aus sonstigen Anwendungen

* In Internet-Reiseportalen können anzuzeigende Hotels meist über Kategorien (z. B. Sterne-Anzahl, Entspannung oder Aktivität etc.) und weiteren Eigenschaften (Tiere erlaubt, Nähe zum Strand, WLAN usw.) durch Festlegung entsprechender Kriterien gefiltert werden.
* In Anwendungen zur Tabellenkalkulation können meist spaltenweise Filter gesetzt werden, die nur die den Kriterien entsprechenden Zeilen anzeigen.
* In Programmen zur Stapelverarbeitung können Filterroutinen bestimmte Eingabedaten aus der Verarbeitung ausschließen; Details siehe auch Normierte Programmierung.
* In vielen Internet-Suchmaschinen können Suchergebnisse nach Sprache und Land oder nach Datum der Erstellung gefiltert werden.
* Im Dienstprogramm SORT der meisten Rechnertypen gibt es eine Filteroption, mit der nur die Eingabedaten verarbeitet (= sortiert und ausgegeben) werden, die den Filterkriterien entsprechen.
Im erweiterten Sinn findet auch beim Verarbeiten von Daten aus Datenbanken ein Filtern statt: Mit speziellen Selektionsbefehlen wird die Datenmenge festgelegt, die verarbeitet werden soll, zum Beispiel Rechnungen an Kunden, die seit 𝑛 Tagen unbezahlt sind, und dazu deren Adressdaten.