awk命令的基本使用
2018-10-11 09:58:45来源:博客园 阅读 ()
命令主要用法
-格式1:前置命令 | awk [选项] '[条件]{编辑指令}'
-格式2:awk [选项] '[条件]{编辑指令}' filename
常用命令选项
-F:指定分隔符,可省略(默认空格或者Tab位)
-f:调用awk脚本尽心个处理
-V:调用外部shell变量
内置变量
变量 用途
FS 保存或设置字段分隔符,如FS=":"
$n 指定分隔的第n个字段,例如$1,$4分别表示第1例,第4例
$0 当前读入的整行文本内容
NF 记录当前处理行的字段个数(有多少列)
FNR 记录当前处理行在原文本内的行号
NR 记录当前已经读入行的数量(多个文本一起读取时,行数累加)
FILENAME 当前处理的文件名
ENVIRON 调用shell环境变量,格式:ENVIRON["变量名"]
awk过滤的时机
BEGIN{}
读入第一行文本之前执行
一般用来初始化操作
逐行处理{}
逐行读入文本执行相应的处理
是最常见,用的多少的编辑指令块
END{}
处理完最后一行文本后执行
一般用来出数处理结果
[root@localhost ~]# awk '{print "第" FNR"行" ,"有"NF"列"}' a.txt 第1行 有2列 第2行 有4列 第3行 有2列 第4行 有3列
1)输出当前用户的UID
[root@localhost ~]# awk -F: '$1==ENVIRON["USER"]{print $3}' /etc/passwd 0
2)预处理
[root@localhost ~]# awk 'BEGIN{a=10;print a+10}' 20
3)统计使用bash的用户数量
[root@localhost ~]# awk 'BEGIN{x=0}/\<bash$/{x++}END{print x}' /etc/passwd 1
awk处理条件概述
格式
awk [选项] '[条件]{指令}' filename
条件的表现形式
正则表达式
/正则内容/
~匹配,!~不匹配
数值/字符串比较
==,!=,>=,<=,>,<等
逻辑比较
&&逻辑与:期望多条件都成立
||逻辑或:只要有一个条件成立即满足要求
运算符
-,+,*,/,%,++,--,+=,-=,*=,/=
1)正则内容
[root@localhost ~]# awk -F: '/^root/{print}' /etc/passwd root:x:0:0:root:/root:/bin/bash
2)~匹配,!~不匹配
[root@localhost ~]# awk -F: '$7!~/nologin/{print}' /etc/passwd root:x:0:0:root:/root:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt
3)==,!=,>=,<=,>,<等,输出第二行文本
[root@localhost ~]# awk 'NR==2{print}' /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin
4)&&逻辑与:期望多条件都成立
[root@localhost ~]# awk -F: '$3>=0&&$3<=10{print $1,$3}' /etc/passwd root 0 bin 1 daemon 2 adm 3 lp 4 sync 5 shutdown 6 halt 7 mail 8 uucp 10
5)运算符,统计文本总字段数量
[root@localhost ~]# awk -F: 'BEGIN{i=0}{i+=NF}END{print i}' /etc/passwd 140
awk流程控制
单分支
if(条件){指令}
双分支
if(条件){指令}else{指令}
多分支
if(条件){指令}else if{指令}else{指令}
while循环
while(条件){指令}
do while
do{指令}while(条件)
for循环
for(初始值;条件;步长){指令}
1)统计UID小于或等于500的用户个数
[root@localhost ~]# awk -F: 'BEGIN{i=0;j=0}{if($3<=500){i++}else{j++}}END{print i,j}' /etc/passwd 21 1
2)统计root出现次数
[root@localhost ~]# awk -F[:/] '{i=1}{while(i<=NF){if($i~/root/){j++};i++}}END{print j}' /etc/passwd 4
3)for循环
[root@localhost ~]# awk 'BEGIN{for(i=0;i<=10;i++){print i}}' 0 1 2 3 4 5 6 7 8 9 10
数组
定义数组
格式:数组名[下标]=元素值
调用数组
格式:数组名[下标]
遍历数组
用法:for(变量 in 数组名){print 数组名[变量]}
数组的经典使用
去除文本重复行:awk '!a[$2]++{print $2}' filename
逐行分析,遇到重复行就跳过
1)去重
[root@localhost ~]# cat a.txt 111 111 222222 22 2222 2 333333333 33 444444444444 444 44 444444444444 444 44 [root@localhost ~]# awk '!a[$2]++{print $2}' a.txt 111 22 33 444
2)列出用户登陆shell的种类
[root@localhost ~]# awk -F: '!shell[$7]++{print $7}' /etc/passwd /bin/bash /sbin/nologin /bin/sync /sbin/shutdown /sbin/halt
3)列出用户登陆shell的种类及个数,类似的可以统计web访问ip及访问次数
[root@localhost ~]# awk -F: '{shell[$7]++}END{for(i in shell){print i,shell[i]}}' /etc/passwd /bin/sync 1 /bin/bash 3 /sbin/nologin 16 /sbin/halt 1 /sbin/shutdown 1 [root@localhost ~]# awk -F: '{shell[$7]++}END{for(i in shell){print i,shell[i]}}' /etc/passwd | sort -nr -k2 /sbin/nologin 16 /bin/bash 3 /sbin/shutdown 1 /sbin/halt 1 /bin/sync 1
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- awk命令详解 2020-06-10
- 运行 docker .... 命令报错 2020-06-10
- 一个骚命令防止你的文件被误删除! 2020-06-08
- ubuntu之命令相关问题 2020-06-06
- linux的常用命令 2020-06-04
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash