网站首页 > 基础教程 正文
摘要:awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 awk的确拥有自己的语言:awk程序设计语言,三位创建者已将它正式定义为“样式扫描和处理语言”。它允许创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
同时,awk又是linux环境下的一个命令行工具,由于awk强大的能力,可以为awk工具传递一个字符串,该字符串的内容类似一种编程语言的语法,所以称其为Awk语言。一般使用awk来做什么,awk又适合做什么工作呢?由于awk天生提供对文件中文本分列进行处理,所以如果一个文件中的每行都被特定的分隔符(常见的是空格)隔开,可以将这个文件看成是由很多列的文本组成,这样的文件最适合用awk进行处理,其实awk在工作中很多时候被用来处理log文件,进行一些统计工作等。
一、命令行格式
awk [options] 'BEGIN{ commands } pattern{ commands } END{ commands }' file
说明:其中options表示awk的可选的命令行选项,其中最常用的恐怕是-F,它指定将文件中每一行分隔成列的分隔符号。而紧接着后面的单引号里面的所有内容是awk的程序脚本,awk需要对文件每一行分割后的每一列做处理。最后的file则是awk要处理的文件名称。
格式解读如下:
awk [-F|-f|-v] 'BEGIN{} //{command1; command2} END{}' file
1、[-F|-f|-v]:-F指定分隔符,-f调用脚本,-v定义变量
2、'': 引用代码块
3、BEGIN: 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符。
4、//: 匹配代码块,可以是字符串或正则表达式
5、{}: 命令代码块,包含一条或多条命令
6、;: 多条命令使用分号分隔
7、END: 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息。
8、File: 需要处理的文件名称
二、正确理解命令行格式
1、-F指定分隔符
awk -F":" '{print $1}' /etc/passwd //以符号 : 分隔。打印第一列
awk -F":" '{print $1 $3}' /etc/passwd //$1与$3相连输出,不分隔
awk -F":" '{print $1,$3}' /etc/passwd //多了一个逗号,$1与$3使用空格分隔
awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd //自定义输出
awk -F: '{print NF}' /etc/passwd //显示每行有多少字段
awk -F: '{print $NF}' /etc/passwd //将每行第NF个字段的值打印出来
awk -F: 'NF==7 {print }' /etc/passwd //显示只有7个字段的行
awk '{print NR,$0}' /etc/passwd //输出每行的行号
awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd //依次打印行号,字段数,最后字段值,制表符,每行内容
awk -F: 'NR==18{print}' /etc/passwd //显示第18行
awk -F: 'NR==1 || NR==16{print}' /etc/passwd //显示第1行和第16行
route -n|awk 'NR!=1{print}' //不显示第一行
2、-f指定脚本文件
执行#vim script.awk编写如下程序
执行# awk -f script.awk /etc/passwd指令。如下图
3、-v指定变量
说明:使用变量apple并对该变量进行赋值,当值为13时,打印apple13。
4、print 打印指定内容
awk '{print}' /etc/passwd == awk '{print $0}' /etc/passwd
awk '{print " "}' /etc/passwd //不输出passwd的内容,而是输出相同个数的空行
awk '{print "a"}' /etc/passwd //输出相同个数的a行,一行只有一个a字母
awk -F: '{print $1; print $2}' /etc/passwd //将每一行的前二个字段,分行输出
awk -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd //输出字段1,3,6,以制表符作为分隔符
5、if语句
使用说明:if语句必须用在{}中,且比较内容用()扩起来。如下图
6、while语句
使用说明:用while循环语句计算1至100的数相加的值。如下图
三、AWK使用实例
1、统计/etc/passwd的账户人数
执行指令# awk '{count++;print $0;} END{print "user count is ", count}' /etc/passwd。如下图
2、统计系统中的secure文件中谁在远程登录服务器
执行指令# awk '/sshd/{print $(NF-3)}' secure-20220605 |sort |uniq -c |sort -nk1
3、统计netstat -anp 状态为LISTEN和CONNECT的连接数量
执行指令# netstat -anp|awk '$6~/LISTEN|CONNECTED/{sum[$6]++} END{for (i in sum) printf "%-10s %-6s %-3s \n", i," ",sum[i]}'
猜你喜欢
- 2025-04-01 awk命令详解(awk命令详解. FNR=NR)
- 2025-04-01 shell——awk命令(shell awk split)
- 2025-04-01 Linux 三剑客之awk 命令(linux awk命令使用实例)
- 2025-04-01 快速学习awk编程(一)(awk程序)
- 2025-04-01 每天一个Linux命令-(1)-awk(linux每天执行一次)
- 2025-04-01 Linux必学技能 | 17个案例带运维小白快速精通Awk命令,拿来即用
- 2025-04-01 Linux环境中的awk命令使用技巧(linux awk命令使用实例)
- 2025-04-01 这些awk用法你会用几个(awk for in)
- 2025-04-01 12、linux命令-awk(linux 命令 awk)
- 2025-04-01 awk命令使用实例(awk中使用shell命令)
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)