前言
AWK是一种优良的文本处理工具。它不仅是Linux中也是任何环境中现有的功能最强大的数据处理引擎之一。
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。该实用工具扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。
相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk工具工作过程
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令
awk是将一行分成多个字段,然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。
在使用awk命令的过程中,可以使用逻辑操作符"&&"表示"与"、"|"表示"或"、"!"表示"非",还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。
awk命令格式
awk 选项 '模式或条件{操作}' 文件1 文件2...
awk -f 脚本文件 文件1 文件2
awk常见的可直接使用的内建变量
| 变量 | 含义 |
|---|---|
| FS | 列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同 |
| OFS | 输出内容的列分隔符 |
| NF | 当前处理的行的字段个数。$NF代表最后一个字段 |
| NR | 当前处理的行的行号(序数) |
| $0 | 当前处理的行的整行内容 |
| $n | 当前处理行的第n个字段(第n列) |
| FILENAME | 被处理的文件名 |
| RS | 行分隔符。awk从文件中读取资料时,将根据RS的定义把资料切割成许多条记录, 而awk一次仅读入一条记录进行处理。预设值是"\n" |
awk基本用法
按行输出
按列(字段)输出
示例:
输出本机ip地址
awk支持三元运算
BEGIN模式
awk 'BEGIN {操作1}; [条件] {操作2}; END {操作3}' 文件
模式
BEGIN {操作1} awk 在读取文件之前的操作
[条件] {操作2} awk 逐行读取文件时执行的操作
END {操作3} awk 在处理完文件所有行之后执行的操作
awk高级用法
通过管道符处理其他命令
变量RS用法
统计行号,账户数量,过滤内存使用率,cpu空闲率,内存剩余容量等等
OFS输出时的列分隔符;FS输入时的列分隔符
使用awk对数组定义
因为awk中数组的下标可以是数字和字母,数组的下标通常被称为关键字(key)。值和关键字都存储在内部的一张针对key/value应用hash的表格里。由于hash不是顺序存储,因此在显示数组内容时会发现,它们并不是按照你预料的顺序显示出来的。数组和变量一样,都是在使用时自动创建的,awk也同样会自动判断其存储的是数字还是字符串。一般而言,awk中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等
思考以下内容使用awk命令内容如何打印
扩展
date命令
Linux中 date 命令可以用来显示或设定系统的日期与时间。
格式
date -d "日期时间" //显示字符串所☞日期和时间
date <+时间日期格式> //☞定日期
eg:
date -d "-1day"
date -d "1day"\
时间日期格式
%% 输出字符 %
%a 星期几的缩写 (Sun..Sat)
%A 星期的完整名称(Sunday..Saturday)。
%b 缩写的月份名称(例如,Jan)
%B 完整的月份名称(例如,January)
%c 本地日期和时间(例如,Thu Mar 3 23:05:25 2005)
%C 世纪,和%Y类似,但是省略后两位(例如,20)
%d 日 (01..31)
%D 日期,等价于%m/%d/%y
%e 一月中的一天,格式使用空格填充,等价于%_d
%F 完整的日期;等价于 %Y-%m-%d
%g ISO 标准计数周的年份的最后两位数字
%G ISO 标准计数周的年份,通常只对%V有用
%h 等价于 %b
%H 小时 (00..23)
%I 小时 (01..12)
%j 一年中的第几天 (001..366)
%k 小时,使用空格填充 ( 0..23); 等价于 %_H
%l 小时, 使用空格填充 ( 1..12); 等价于 %_I
%m 月份 (01..12)
%M 分钟 (00..59)
%n 新的一行,换行符
%N 纳秒 (000000000..999999999)
%p 用于表示当地的AM或PM,如果未知则为空白
%P 类似 %p, 但是是小写的
%r 本地的 12 小时制时间(例如 11:11:04 PM)
%R 24 小时制 的小时与分钟; 等价于 %H:%M
%S 秒 (00..60)
%t 插入水平制表符 tab
%T 时间; 等价于 %H:%M:%S
%u 一周中的一天 (1..7); 1 表示星期一
%U 一年中的第几周,周日作为一周的起始 (00..53)
%V ISO 标准计数周,该方法将周一作为一周的起始 (01..53)
%w 一周中的一天(0..6),0代表星期天
%W 一年中的第几周,周一作为一周的起始(00..53)
%x 本地的日期格式(例如,12/31/99)
%X 本地的日期格式(例如,23:13:48)
%y 年份后两位数字 (00..99)
%Y 年
%Z 时区缩写 (如 EDT)
常用操作
date +%Y%m%d # 显示年月日
date -d "+1 day" +"%Y%m%d" # 显示后一天的日期
date -d "-1 month" +"%Y%m%d" # 显示上一月的日期
date -d "1 month ago" +"%Y%m%d" # 显示上一月的日期
date -d "-1 year" +"%Y%m%d" # 显示前一年的日期
date -d "10 second ago" +"%Y%m%d %H:%M:%S" # 显示10秒前的时间,显示具体的时分秒
查看系统启动时间,通过date命令计算出系统启动时间(本次系统开机时间)