awk命令的基本使用
命令主要用法
-格式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
2)预处理
[root@localhost ~]# awk 'BEGIN{a=10;print a+10}'
3)统计使用bash的用户数量
[root@localhost ~]# awk 'BEGIN{x=0}/\<bash$/{x++}END{print x}' /etc/passwd
awk处理条件概述
格式
awk [选项] '[条件]{指令}' filename
条件的表现形式
正则表达式
/正则内容/
~匹配,!~不匹配
数值/字符串比较
==,!=,>=,<=,>,<等
逻辑比较
&&逻辑与:期望多条件都成立
||逻辑或:只要有一个条件成立即满足要求
运算符
-,+,*,/,%,++,--,+=,-=,*=,/=
1)正则内容
[root@localhost ~]# awk -F: '/^root/{print}' /etc/passwd
root:x:::root:/root:/bin/bash
2)~匹配,!~不匹配
[root@localhost ~]# awk -F: '$7!~/nologin/{print}' /etc/passwd
root:x:::root:/root:/bin/bash
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
3)==,!=,>=,<=,>,<等,输出第二行文本
[root@localhost ~]# awk 'NR==2{print}' /etc/passwd
bin:x:::bin:/bin:/sbin/nologin
4)&&逻辑与:期望多条件都成立
[root@localhost ~]# awk -F: '$3>=0&&$3<=10{print $1,$3}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
uucp
5)运算符,统计文本总字段数量
[root@localhost ~]# awk -F: 'BEGIN{i=0}{i+=NF}END{print i}' /etc/passwd
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
2)统计root出现次数
[root@localhost ~]# awk -F[:/] '{i=1}{while(i<=NF){if($i~/root/){j++};i++}}END{print j}' /etc/passwd
3)for循环
[root@localhost ~]# awk 'BEGIN{for(i=0;i<=10;i++){print i}}'
数组
定义数组
格式:数组名[下标]=元素值
调用数组
格式:数组名[下标]
遍历数组
用法:for(变量 in 数组名){print 数组名[变量]}
数组的经典使用
去除文本重复行:awk '!a[$2]++{print $2}' filename
逐行分析,遇到重复行就跳过
1)去重
[root@localhost ~]# cat a.txt
[root@localhost ~]# awk '!a[$2]++{print $2}' a.txt
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
/bin/bash
/sbin/nologin
/sbin/halt
/sbin/shutdown
[root@localhost ~]# awk -F: '{shell[$7]++}END{for(i in shell){print i,shell[i]}}' /etc/passwd | sort -nr -k2
/sbin/nologin
/bin/bash
/sbin/shutdown
/sbin/halt
/bin/sync
4)统计nginx访问最多的ip
[root@ nginx]$ sudo awk '{ip[$1]++}END{for(i in ip) {print i,ip[i]}}' access.log | sort -nr -k2
146.145.196.170
111.7.10.21
124.25.17.151
47.92.114.243
11.7.100.24
111.7.100.22
111.7.100.20
106.14.217.247
47.92.126.167
11.7.100.23
111.7.10.19
111.7.100.25
111.7.10.18
111.7.100.27
111.7.10.26
80.82.70.187
83.143.86.62
80.82.78.104
awk命令的基本使用的更多相关文章
- linux awk命令详解
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- awk命令详解
搜索 纠正错误 添加实例 awk 文本和数据进行处理的编程语言 补充说明 awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件 ...
- Linux安全基础:awk命令的使用
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...
- AWK命令学习
使用方法 awk 'pattern {action}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到 ...
- awk 命令
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...
- AWK命令的用法
1.awk命令简介: awk是一种可以处理数据.产生格式化报表的语言,功能十分强大. awk的工作方式是读取数据,将每一行数据视为一条记录(record)每笔记录以字段分隔符分成若干字段,然后输出各个 ...
- [Linux] linux awk命令详解
reference : http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于g ...
- awk命令简单介绍
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- Linux的awk命令
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- awk命令--update20150120
简介 awk是一个强大的文本分析工具,把文件逐行读入,以空格为默认分隔符分割成field,切开的部分再进行各种分析处理. 模式和动作: 任何awk语句都是由模式和动作组成,模式部分决定动作语句何时触发 ...
随机推荐
- 这才是真正的裸眼3D!超级震撼!!
大家有没认为有意思啦,反正俺是被震撼到了. 好奇异-- ! " src="http://www.yixieshi.com/uploads/allimg/141116/1446431 ...
- excel中批量删除公式,保留数值
excel中批量删除公式,保留数值 Sub macro1() Dim sh As Worksheet For Each sh In Sheets sh.UsedRange = sh.UsedRange ...
- 通信原理之IP协议,ARP协议 (三)
把这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数 ...
- 【消灭代办】第2周 - 数组判断、开发工具、transform:matrix、Grid
2018.11.19代办一:[数组判断] 代办描述: 怎么判断一个数组是数组呢?其实这个也是一个常考的题目 关键考点: 1.js中对象类型判断的几种方法 2.数组的知识和灵活运用 解决方案s: 篇幅过 ...
- Spark2 Model selection and tuning 模型选择与调优
Model selection模型选择 ML中的一个重要任务是模型选择,或使用数据为给定任务找到最佳的模型或参数. 这也称为调优. 可以对诸如Logistic回归的单独Estimators进行调整,或 ...
- 带分数|2013年蓝桥杯B组题解析第九题-fishers
带分数 100 可以表示为带分数的形式:100 = 3 + 69258 / 714 还可以表示为:100 = 82 + 3546 / 197 注意特征:带分数中,数字1~9分别出现且只出现一次(不包含 ...
- Nordic NRF51822 从零开始系列(一)开发环境的搭建
硬件准备 (1)nrf51822 开发板一块(此处使用的是青云系列的,自带jlijnk ob+usb串口芯片)或者使用nrf51822模块+jlink_ob ( ...
- Tif文件合并类
using System; using System.Collections; using System.Collections.Generic; using System.Drawing; usin ...
- MyEclipse中同时启动两个tomcat
开发的时候,有些时候需要同时启动两个项目.首先配置tomcat,方法如下:(转载自:http://bendan123812.iteye.com/blog/1716789) 一.把Tomcat复制一份并 ...
- Prometheus 函数
函数列表 一些函数有默认的参数,例如:year(v=vector(time()) instant-vector).v是参数值,instant-vector是参数类型.vector(time())是默认 ...