Heim > Artikel > Betrieb und Instandhaltung > So verwenden Sie den Linux-Befehl awk
Unter Linux ist der awk-Befehl ein Textdatenverarbeitungstool, das sich zum Formatieren von Textdateien und zum Durchführen einer komplexeren Verarbeitung und Analyse von Textdateien eignet. Die Syntax lautet „awk [Option] ‚Muster[Aktion]‘ Datei …“ . Awk verfügt beispielsweise über leistungsstarke Textformatierungsfunktionen. Für eine Reihe scheinbar unregelmäßiger Protokolldateien, Textdateien usw. ist die formatierte Ausgabe beispielsweise nach Übergabe des awk-Befehls ein professioneller Stil, der für die Datenanalyse auf Anwendungsebene verwendet werden kann.
Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Dell G3-Computer.
Es gibt ein leistungsfähigeres Textdatenverarbeitungstool im Linux-System, nämlich awk. Es wurde in den späten 1970er Jahren geboren, was einer der Gründe sein könnte, warum es so viele Linux-Benutzer beeinflusste.
Einige Leute haben spekuliert, dass der Name des awk-Befehls vom Wort awkward stammt. Tatsächlich ist dies nicht der Fall. Es gibt drei Designer dieses Kommandos. Ihre Nachnamen sind Aho, Weingberger und Kernighan, die die Anfangsbuchstaben des Nachnamens des Meisters sind.
awk verfügt beispielsweise über leistungsstarke Textformatierungsfunktionen. Für eine Reihe scheinbar unregelmäßiger Protokolldateien, Textdateien usw. ist die formatierte Ausgabe beispielsweise nach der Übergabe des awk-Befehls ein professioneller Stil, der auf Anwendungsebene verwendet werden kann Datenanalyse;
awk ist wie eine Programmiersprache, die bedingte Beurteilung, Arrays, Schleifen und viele andere Funktionen unterstützt;
awk [option] 'pattern[action]' file ... awk 参数 条件动作 文件
Aktion bezieht sich auf die Aktion awk, die gut in der Textformatierung ist und formatierte Ergebnisse ausgeben kann. Die am häufigsten verwendeten Aktionen sind daher Drucken und Drucken von Textinhalten awk verwendet standardmäßig Leerzeichen als Trennzeichen, und
awk verarbeitet Dateien Zeile für Zeile, und nachdem eine Zeile verarbeitet wurde, kannawk verarbeitet werden vom Benutzer angegeben Das Trennzeichen funktioniert. Wenn es nicht angegeben ist, wird standardmäßig ein Leerzeichen verwendet. 1. Integrierte awk-Variablen
Integrierte Variablen
$n
NF (Anzahl der Felder) | Nachdem die Felder getrennt wurden, wie viele Felder gibt es derzeit? |
---|
参数 | 说明 |
---|---|
-F | 指定分隔字段符 |
-v | 定义或修改一个awk内部变量 |
-f | 从脚本文件中读取awk命令 |
上文谈到,awk默认的字段分隔符为空格,但是像下面这样的文本,以 # 为分隔符,就需要用到自定义分隔符;
1、显示第一列和第二列内容
awk -F "#" '{print $1,$2}' zcy2.txt
2、显示文件第一列,倒是第一列,和倒数第二列的内容
awk '{print $1,$(NF-1),$(NF-2)}' alx.txt
3、取出本机的IP地址
使用awk的方式获取的话,如果以空格为分隔符,我们发现目标字段在第二行的第二列,使用下面的命令即可,看起来,比起sed和grep命令似乎更简单;
ifconfig eth0 | awk 'NR==2{print $2}'
4、取出密码文件中的第一列和最后一列
考察对自定义输入分隔符的使用,可以看到,下面的文本文件中,可以考虑使用 : 进行分割;
awk -F ':' '{print $1,$NF}' pwd2.txt
通过上文的学习,我们知道awk命令执行后,默认采用空格分割字段,而这个空格就是默认的输出分割符,
单在某些情况下,为了将数据展示的效果更加醒目一些,就可以使用OFS的自定义输出分隔符;
仍然以上面的密码文本为例,输出第一列和最后一列的字段;
awk -F ':' -v OFS=' *** ' '{print $1,$NF}' pwd2.txt
该表默认输出分隔符,直接在awk后面使用: -v OFS=‘自定义输出分隔符’
awk参数
参数 | 说明 |
---|---|
-F | 指定分隔字段符 |
-v | 定义或修改一个awk内部变量 |
-f | 从脚本文件中读取awk命令 |
对于awk来讲,变量分为:内置变量和自定义变量
awk内置变量
参数 | 说明 |
---|---|
FS | 输入字段分隔符,默认为空白字符 |
OFS | 输出字段分隔符,默认为空白字符 |
RS | 输入记录分隔符,指定输入时的换行符 |
ORS | 输出记录分隔符,输出时用指定符号替换换行符 |
NF | 当前行的字段个数,字段数量 |
NR | 行号,当前处理文本行的行号 |
FNR | 各文件分别计数的行号 |
FILENAME | 当前文件名 |
ARGC | 命令行参数个数 |
ARGV | 数组,保存的是命令行所给定的各个参数 |
比较常用的内置变量包括: NR,NF,FNR
FILENAME 使用
FILENAME 为awk的内置变量,通过下面这个命令,可以看到在每行记录之前,输出了当前文件名称;
awk 'NR==1,NR==3{print FILENAME,$0}' alx.txt
ARGV使用
先来看下面这条命令的执行结果
awk 'NR==1,NR==3{print ARGV[0],ARGV[1],$0}' alx.txt
可以发现,在输出的每一行记录前面,拼上了 awk 和 alx.txt这两个字段,这两个字段就是这行命令整体解析出来的2个内置参数;
自定义变量
看下面这条命令输出效果,通过-v参数,可以自定义变量进行参数传递;
awk -v myname="zcy" 'BEGIN{print "我的名字是?" ,myname}'
在上文,我们接触的是awk的输出功能,主要使用了 print 这个进行输出,它只能对文本进行简单的输出,但是并不能美化或者修改输出格式;
printf 格式化输出
如果对C语言有过了解的同学,对printf 并不陌生,使用这个命令(函数)可以对文本进行格式化输出;
printf与print的几点区别
如下,假如我们直接使用 printf 这样操作,看下效果
awk '{printf $0}' alx.txt
明显来说,把所有内容都输出到同一行了,这时候,就需要使用 printf的格式化输出来控制;
awk '{printf "%s\n", $0}' alx.txt
再看一个案例,使用 printf 将文本中的每一列添加前置输出
awk '{printf "第一列:%s 第二列:%s 第三列:%s\n" ,$1,$2,$3}' alx.txt
上文了解到,awk的语法如下 :
awk [option] ‘pattern[action]’ file …
而且我们了解到,awk是按行处理文本,以上都是关于 print 相关,接下来,聊聊pattern相关的内容;
在pattern中,有个比较常见的pattern,BEGIN和END;
awk 'BEGIN{print "小明在学linux"}'
或者下面这样
awk 'BEGIN{print "小明在学linux"} {print $0}END{print "处理结束"}' alx.txt
注意:BEGIN 和 END分别放到处理文本内容前后即可
awk如果不指定模式是按行处理,如果指定了模式,只有符合模式的才会被处理
awk常用模式
关系运算符 | 说明 |
---|---|
小于 | |
小于等于 | |
== | 等于 |
!= | 不等于 |
>= | 大于等于 |
~ | 匹配正则 |
!~ | 不匹配正则 |
1、打印前三行的文本内容
awk 'NR<=3{print $0}' alx.txt
2、匹配密码文本中含有 zcy 的行
awk '/^zcy/{print $0}' pwd.txt
3、格式化输出 /etc/passwd 的部分字段
awk -F ":" 'BEGIN{print"用户名\t\t\t字段1\t\t 字段2\t\t 权限"} {printf "user:%-20s%-20s%-20s%-20s\n", $1,$4,$5,$7}' pwd.txt
4、找出pwd文件中nologin的用户
awk '/\/sbin\/nologin$/{print NR,$0}' pwd.txt
5、找出 下面这个区间的文本行
awk '/^daemon/,/^operator/{print NR,$0}' pwd.txt
相关推荐:《Linux视频教程》
Das obige ist der detaillierte Inhalt vonSo verwenden Sie den Linux-Befehl awk. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!