Einführung
Awk ist ein leistungsstarkes Textverarbeitungstool, das vom GNU-Projekt entwickelt wurde. Es wird hauptsächlich verwendet, um Eingaben (normalerweise eine Textdatei) zu lesen, jede Zeile gemäß bestimmten Bedingungen abzugleichen und dann bestimmte Operationen an den übereinstimmenden Zeilen auszuführen.
Grundlegende Verwendung
awk
Die grundlegende Verwendung ist wie folgt:
# 格式
$ awk 动作 文件名
# 示例
$ awk '{print $0}' demo.txt
Im obigen Beispiel demo.txt
handelt es sich um awk
die zu verarbeitende Textdatei. Innerhalb des vorherigen einfachen Anführungszeichens befindet sich eine geschweifte Klammer, die die Verarbeitungsaktion für jede Zeile enthält print $0
. Darunter print
befindet sich der Druckbefehl, $0
der die aktuelle Zeile darstellt. Daher besteht das Ausführungsergebnis des obigen Befehls darin, jede Zeile so auszudrucken, wie sie ist.
Als nächstes verwenden wir zunächst die Standardeingabe (stdin), um das obige Beispiel zu demonstrieren.
$ echo 'this is a test' | awk '{print $0}'
this is a test
Im obigen Code print $0
wird die Standardeingabe this is a test
erneut gedruckt.
awk
Jede Zeile wird anhand von Leerzeichen und Tabulatoren in mehrere Felder unterteilt, wobei $1
, $2
, $3
zur Darstellung des ersten Felds, des zweiten Felds, des dritten Felds usw. verwendet werden.
$ echo 'this is a test' | awk '{print $3}'
a
$3
Stellt im obigen Code this is a test
das dritte Feld dar a
.
Im Folgenden /etc/passwd
speichern wir die Datei beispielsweise als demo.txt
.
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
Das Feldtrennzeichen dieser Datei ist Doppelpunkt ( :
), daher müssen Sie den Parameter verwenden -F
, um das Trennzeichen als Doppelpunkt anzugeben. Anschließend kann das erste Feld extrahiert werden.
$ awk -F ':' '{ print $1 }' demo.txt
root
daemon
bin
sys
sync
Variable
Neben $ +
Zahlen, die ein Feld darstellen, awk
werden auch eine Reihe anderer Variablen bereitgestellt.
Die Variable NF
gibt an, wie viele Felder es in der aktuellen Zeile gibt, $NF
sie stellt also das letzte Feld dar.
$ echo 'this is a test' | awk '{print $NF}'
test
$(NF-1)
Stellt das vorletzte Feld dar.
$ awk -F ':' '{print $1, $(NF-1)}' demo.txt
root /root
daemon /usr/sbin
bin /bin
sys /dev
sync /bin
Im obigen Code print
bedeutet das Komma im Befehl, dass bei der Ausgabe ein Leerzeichen verwendet wird, um die beiden Teile zu trennen.
Die Variable NR
gibt an, welche Zeile gerade verarbeitet wird.
$ awk -F ':' '{print NR ") " $1}' demo.txt
1) root
2) daemon
3) bin
4) sys
5) sync
Wenn im obigen Code print
im Befehl die Zeichen so ausgegeben werden, wie sie sind, müssen sie in doppelte Anführungszeichen gesetzt werden.
awk
Die anderen integrierten Variablen lauten wie folgt.
FILENAME:当前文件名
FS:字段分隔符,默认是空格和制表符。
RS:行分隔符,用于分割每一行,默认是换行符。
OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT:数字输出的格式,默认为%.6g。