Wählen Sie in UNIX eine beliebige Textspalte aus

UNIX bietet wundervoll leistungsstarke Textverarbeitungsfunktionen. Es gibt zahlreiche Möglichkeiten, das gleiche Problem zu lösen. Häufig ist es beispielsweise erforderlich, eine einzelne Datenspalte aus einer Textdatei oder einem Ausgabestrom zu extrahieren. Dieses technische Rezept wird mehrere Lösungen für dieses Problem bieten.


Viele Datendateien haben Datenfelder, die durch ein einzelnes Zeichen wie einen Tabulator oder einen Doppelpunkt begrenzt sind. Um das vollständige Namensfeld aus / etc / passwd, dem fünften durch Doppelpunkt getrennten Feld, zu extrahieren, verwenden Sie:

cut -d: -f 5 / etc / passwd

Der Befehl "Ausschneiden" ermöglicht eine hohe Flexibilität beim Schneiden von Daten. In diesem Fall ist die -d: Leitet cut, um einen Doppelpunkt als Trennzeichen zu verwenden. Das -f 5 Der Parameter weist cut an, nur das fünfte Feld zu extrahieren. Der Feldparameter macht den Schnitt extrem flexibel. Andere Beispiele sind -f 2-5 Felder 2 bis 5 extrahieren, -f 1,3,7 das erste, dritte und siebte Feld zu extrahieren.

Verwenden Sie den folgenden Befehl, um eine feste Menge von Spalten (z. B. die Spaltennummern 44 bis 49) aus einer langen Verzeichnisliste (ls -l) zu extrahieren:

ls -l | Schnitt -c 44-49

In vielen UNIX-Systemen stellen diese Spalten das Änderungsdatum dar. Wie der Parameter -f kann der Parameter -c alternative Werte akzeptieren, z -c 5,7,6,8 zeigt diese Zeichenpositionen in dieser Reihenfolge an.

Eine der schwierigeren Spaltenextraktionen beinhaltet das Vorhandensein einer variablen Menge von Leerzeichen zwischen Feldern. Um das Feld Prozess-ID (zweites Feld) aus einer Prozessliste (ps -ef) zu extrahieren, funktioniert Ausschneiden nicht. Ein weiterer leistungsfähiger Textmanipulator in UNIX ist awk, der versteht, dass mehrere Leerzeichen als ein Leerzeichen gezählt werden sollten. Um die PID aus einem ps -ef zu extrahieren, verwenden Sie:

ps -ef | Kopf | awk '{print $ 2}'

Awk ist ein unglaublich leistungsfähiges Werkzeug, und dies ist eine triviale, aber nützliche Anwendung.