谢烟客---------Linux之Aho Weinberger Kernighan

工作模式,类似cut功能,

与sed区别
1、格式

2、PATTERN

awk基本格式:

awk [OPTION...] ‘PATTERN{ACTION STATEMENT;ACTION STATEMENT;...}‘ FILE1 FILE2 ...

OPTION:

    -F ‘‘ 指明分隔符

    -v var="value" 定义变量

PATTERN:定义读入哪些行时对行处理

ACTION: 对行如何处理,文本格式化输出:print,printf

多个语句间用 ;

1、变量

内建变量

自定义变量

变量应用注意


2、ACTION

print

printf


3、操作符


4、PATTERN定界:‘PATTERN{ACTION STATEMENT}‘


5、ACTION

5.1 if-else awk取得的行进行字段判断

if (condition) {true-statement} 或  if (condition) true-statement
if (condition) {true-statement} else {false-statement}

id号大于1000为普通用户

最后一个字段的行/bin/bash结尾

字段数大于5个,显示行,否则不显示

显示文件系统使用结果>80则显示

id号大于1000为普通用户
# awk -F ‘:‘ ‘{if ($3>500){print $1,$3}}‘ /etc/passwd
# awk -F ‘:‘ ‘{if ($3>500){printf "%15s %-d\n",$1,$3}}‘ /etc/passwd
最后一个字段的行/bin/bash结尾
# awk -F ‘:‘ ‘{if ($NF == "/bin/bash"){print $1,$3}}‘ /etc/passwd
# awk -F ‘:‘ ‘{if ($NF ~ /\<bash$/){print $NF}}‘ /etc/passwd
字段数大于5个,显示行,否则不显示
# awk -F ‘:‘ ‘{if (NF>5){print $0}}‘ /etc/passwd
显示文件系统使用结果>80则显示
# df -hP | awk -v FS="%" ‘!/^File/{print $1}‘ | awk ‘{if ($NF>80){print $1}}‘

5.2 while  对一行内的多个字段逐一处理时使用,对数组中各元素逐一处理时使用

while (condition) {true-statement}
(condition) 判断条件
 {true-statement} 条件为真时,执行循环体

length(arg1,arg2,...) 显示字段的长度

对整个一行中的各字段,显示各字段内容和字段中包含的字段的个数

对整个一行中的各字段,字段大于等于10才显示字段内容和字段中包含的字段的个数

对整个一行中的各字段,显示各字段内容和字段中包含的字段的个数

# awk ‘{i=1;while (i<=NF){print $i,length($i);i++}}‘ /etc/fstab

思路: awk ‘{print length($i)}‘ FILE
i表示每个字段即可

对整个一行中的各字段,字段大于等于10才显示字段内容和字段中包含的字段的个数

# awk ‘{i=1;while (i<=NF){if (length($i)>5)print $i,length($i);i++}}‘ /etc/fstab 

循环嵌套if条件判断

5.3 do-while循环

do {true-statement} while (condition)
至少执行一次循环体
# awk ‘{i=1;do {print $i,length($i);i++} while (i<=NF)}‘ /etc/issue

5.4   for 循环

for (控制变量初始化;控制变量条件表达式;控制变量的修正表达式) {statement}
for (variable assignment;condition;iteration process) {for-body}

对整个一行中的各字段,显示各字段内容和字段中包含的字段的个数

对整个一行中的各字段,字段大于等于10才显示字段内容和字段中包含的字段的个数


对整个一行中的各字段,显示各字段内容和字段中包含的字段的个数

显示模式匹配到的行
# awk ‘/^[[:space:]]+/{print}‘ /etc/grub.conf

用I表示每个字段
# awk ‘/^[[:space:]]+/{print length($i)}‘ /etc/grub.conf 

套入循环格式 ,在循环体中要对I值进行修正
# awk ‘/^[[:space:]]+/{i=1;while (i<=NF){print $i,length($i);i++}}‘ /etc/grub.conf

对整个一行中的各字段,字段大于等于10才显示字段内容和字段中包含的字段的个数

循环体中嵌套单分支if语句 ,单分支if的statement的{} 可省略
# awk ‘/^[[:space:]]+/{i=1;while (i<=NF){if (length($i)>=10)print $i,length($i);i++}}‘ /etc/grub.conf

5.5 switch语句 多分支if

switch (expression) (case VALUE1 or /REGEXP1/:statement;case VALUE2 or /REGEXP2/:statement;...; default:statemet)
表达式 == value1 或 表达式 ~ /REGEXP1

》》》

5.6 break [n] 或 continue

显示奇数字段
# awk -F ‘:‘ ‘{i=1;while (i<=NF){if (i%2==0) {i++;continue} else {print i,$i;i++}}}‘ /etc/passwd

5.7 next 提前结束本行处理

显示以/bin/bash结尾的行,非/bin/bash结尾的行next
# awk -F ‘:‘ ‘{if ($NF != "/bin/bash"){next} else {print $0}}‘ /etc/passwd
显示用户id号为偶数的用户
# awk -F ‘:‘ ‘{if ($3%2 != 0){next} else {print $0}}‘ /etc/passwd


6、数组

显示第一个元素
# awk ‘BEGIN{weekdays["mon"]="Monday";weekdays["thu"]="Thuseday";print weekdays["mon"]}‘


统计netstat状态

统计日志IP

统计/etc/fstab文件中每个单词出现的次数

统计文件系统出现的次数

统计netstat -tnl 中的状态

1)查看所有状态
netstat -tan | awk ‘{print $NF}‘

2)# netstat -tan | awk ‘{state[$NF]++}END{for (i in state){print i,state[i]}}‘
统计日志

1)查看httpd是否被安装
rpm -q httpd
2) 启动httpd
service httpd start
3)httpd自带压力测试工具,ab
ab -c 100 -n 1000 
4)统计日志IP
# awk ‘{count[$1]++}END{for (i in count){print i,count[i]}}‘ /var/log/httpd/access_log
统计/etc/fstab文件中每个单词出现的次数
# awk ‘{i=1;while (i<=NF){count[$i]++;i++}}END{for (i in count){print i,count[i]}}‘ /etc/fstab
# awk ‘{for(i=1;i<=NF;i++){count[$i]++}}END{for (i in count){print i,count[i]}}‘ /etc/fstab
统计文件系统出现的次数
# awk ‘{print $3}‘ /etc/fstab 
# awk ‘{count[$3]++}END{for (i in count){print i,count[i]}}‘ /etc/fstab

7、函数

统计每一个ip建立ip的个数

统计每一个ip建立ip的个数
# netstat -tnl | awk ‘!/^Proto/ && !/^Active/{split($5,state,":");ip[state[1]]++}END{for (i in ip){print i,ip[i]}}‘
时间: 2024-12-18 07:59:00

谢烟客---------Linux之Aho Weinberger Kernighan的相关文章

谢烟客---------Linux之Bash基础特性条件测试&&自定义退出状态码(6)

条件测试 判断某需求是否满足,需要由测试机制来实现. 根据命令的执行状态结果,表达不同的测试条件 1.根据id命令的执行状态结果,判断用户是否存在 [[email protected] ~]# id root uid=0(root) gid=0(root) groups=0(root) [[email protected] ~]# echo $? 0 [[email protected] ~]# id help id: help: no such user [[email protected] 

&nbsp; &nbsp; &nbsp;谢烟客-----Linux入门

为什么要学习 Linux 2050年人工智能或将超越人类智商,机器人产生了自主意识,,完全取代人脑思维甚至统治人类,或许.... 有人说:windows是漂亮的,Linux是智慧的.透明的. 全球TOP500超级计算机排行榜中99%都是linux内核. 任何手持智能终端设备就连电子表的底层都是Linux 你或许会认为Windows更为易用,Linux操作起来很慢,Linux入门曲线陡峭,其实当我们学会一些命令之后,一个命令所完成的事,Windows中需要几次步骤才能完成. 基于命令行,执行速度快

谢烟客---------Linux之深入理解anaconda使用

获取详细的帮助: 官方文档: <Installation Guide> anaconda位置 anaconda命令行 anaconda配置方式 kickstart文件格式 kickstart创建 基于光盘安装linux anaconda位置 光盘.ftp.nfs.httpd.nfs **基于光盘,安装linux,见文未** anaconda命令行 boot: linux [options] options anaconda配置方式 kickstart文件格式 位置:~/anaconda-ks.

谢烟客---------Linux之程序包管理yum使用和编译安装

yum命令及仓库创建与配置 YUM 原理 安装.卸载.查询.升级.检查,本地缓存.重装.降级.历史.获取帮助 仓库 变量.事务.URL.开销.镜像.元数据存储方式及组成 createrepo作用.命令.lftp命令 编译安装  目的 原理 开发工具及开发环境 编译后的处理 获取程序包源代码的途径 YUM Redhat二次发行版 Yellow Dog Linux,上使用的yum(Yellowdog Update Modifier),由yellow dog 研发 yum命令的工作原理 1.接收用户命

谢烟客---------Linux之文件系统管理创建与挂载

文件系统在哪实现? 内核 内核级文件系统的组成?模块.用户空间中的程序 哪些是内核级文件系统?除了分布式文件系统 模块的定义 中间层定义 文件如何按名存取 查找文件.创建文件.存储文件文件系统.格式化 swap,虚拟内存 日志型文件系统和非日志型文件系统工作原理 超级块 文件按名存取的实现 文件系统实现按名存取将分区后的存储空间划分为数据区和元数据区. 数据区:   存储大小相同的数据块    元数据区:有多个inode块,每个inode块中存储:filename,perm,owner,grou

谢烟客---------Linux之find查找

查找的区别 grep 根据PATTERN逐行匹配目标文本,打印字串所在行至标准输出 find  根据查找条件在给定的路径下,查找文件名对应的文件 查找的分类 实时查找: find 根据用户给出的路径,在路径下查找 非实时查找:locate,whatis 依据事先构建的索引,在数据库中查找 手动更新数据库的命令: updatedb, makewhatis 查找的特性 find:实时.速度慢.精确匹配 locate: 非实时.速度快.模糊匹配 查找语法 2.获取帮助 # man find 或 fin

谢烟客---------Linux之DNS请求流程及资源记录定义

DNS类型/同步类型/域和区域的区别 SOA内部数据特性 DNS负载均衡(Load balance)的实现 缓存DNS服务器 缓存定义.作用.多级缓存 一次完整的解析请求 解析答案 DNS分布式特点 区域解析库/RR/RR_TYPE A记录的轮循.多主机名对同一个主机.泛域名解析 <<反反复复,多次权衡的结果 >> DNS类型.同步类型.区域和域的区别 SOA内部数据特性 DNS负载均衡(Load balance)的实现 缓存DNS服务器 缓存定义.作用.多级缓存 一次完整的解析请

谢烟客---------Linux之SELinux的基本应用

SELinux基础/激活或关闭SELinux/改变object的域/启用或关闭程序功能 获取更多帮助 <SELinux权威指南> 或许应该叫:如何理解Windows Linux比Windows更安全,这样说不合理. 安全等级: A>B>C>D Linux(c2) Windows(c2) GUI界面:MAC>Windows 图形工作站:mac Windows 专业普及计算机系统.图形不如mac,又不够安全. SELinux基础 1)访问模型 Linux原有访问模型:自主访

谢烟客---------Linux之内核编译及LFS制作

内核组成.内核优化.内核编译步骤:开发环境.硬件信息.展开到源码树.内存特性设定.编译 屏幕:在一个终端上,为多个进程,开启多个使用接口. 何谓交叉编译:目标代码非当前平台 有10天没有学习了,去做了LFS,当然得感谢我"瑞哥",学习Linux的导师,www.mykernel.cn , 要不是他告诉我说,选对发行版本和LFS手册很关键,否则很难一次成功的. 前3天就是不懂,好不容易编译到gcc,呀!失败了,..... 心得:体验就够了,没有必要花时间在LFS制作之上,完全浪费时间. 1