【AWK】awk 基础用法和应用
很久之前学的AWK,现在回看笔记,对其进行一个小小的总结~
目录
awk可以做什么?
awk 基本命令格式
编辑分隔符、域和记录
awk内置变量
输出格式printf命令
awk基础应用:
(一)统计字符串次数
(二)文件拆分
(三)处理文本
(四)字符串操作
awk可以做什么?
1. 能够将给定的文本内容,按照我们期望的格式输出显示,打印成报表。
2. 分析处理系统日志,快速地分析挖掘我们关心的数据,并生成统计信息;
3. 方便地用来统计数据,比如网站的访问量,访问的 IP 量等;
4. 通过各种工具的组合,快速地汇总分析系统的运行信息,让你对系统的运行了如指掌;
5. 强大的脚本语言表达能力,支持循环、条件、数组等语法,助你分析更加复杂的数据;
awk 比较擅长处理格式化的文本,比如 日志、csv 格式数据
awk 基本命令格式
awk 'BEGIN{ action;.... }pattern{ action;... }END{ action;.... }' file
常见的Action分类:
表达式:算术,比较表达式
条件控制语句:if,while等
组合语句
输出语句:print等
分隔符、域和记录
awk执行时,有分隔符分隔的字段(域)标记 $1,$2,...$n成为域标识。$0表示所有域(F)。可以通过-F=‘’ 来指定分隔符,如-F=':' 或者-F:表示分隔符为冒号
文件的每一行为记录(R) ,
当省略action,默认执行print $0
awk内置变量
引用时无需$
FS:输入字段分隔符,默认是空白字符
awk -v FS=':' '{print $1,FS,$3}' /etc/passwdawk -F='2019' '{print $1,"*",$2}' file.txt
以:为分隔符,过滤出第一列和第三列,输出时两列间以:为分隔符
以2019为分隔符,用*替换2019
OFS:指定输出时的分隔符
RS:输入记录分隔符,指定输入是的换行符
NF:当前的列数
awk '{print $1,$2,$3,$4}' OFS=":" file.txt
输出时,字段间用OFS指定输出分隔符为:
NR:当前的行数
输出格式printf命令
printf需要给出换行控制符,\n
%d显示十进制整数,%f显示浮点数,%s显示字符串,%%显示%自身
%u
十进制无符号整数%c
单个字符%e
指数形式的浮点数%x
%X
无符号以十六进制表示的整数%0
无符号以八进制表示的整数%g
自动选择合适的表示法\n
换行符\t
Tab符
修饰符:
-:左对齐(默认右对齐)
+:显示数值的正负符号%+d
%3.1f :第一个数字控制显示的宽度,第二个表示小数点后的精度
awk '{printf "%-4s %-6s\n",$1,$2}' file.txt
左对齐,列宽为4,%s为字符串占位符。
awk 支持各种比较运算符号
==,!=,>,>=,<.<=
还支持逻辑操作符来过滤
&&与 ||或 !非
awk -F: '$3==0 || $6>=1000 {print $0}' /etc/passwd
以上过滤条件为第三列等于0或者第六列大于等于1000的行才被输出
模式匹配符 ~
awk -F: '$0 ~ /root/ {print $1}' /etc/passwd
匹配含有root,输出第一列
同样,awk也支持象grep一样匹配某一行
awk '/OS Name|OS Version/' file.txt
匹配多个关键词
模式取反!
awk '!/Aug/' file.txt
awk基础应用:
(一)统计字符串次数
统计file.txt中每个字符串出现的次数
welcome nowcoder
welcome to nowcoder
nowcoder
awk '{for(i=1;i<=NF;i++)arr[$i]++}END{for(pattern in arr)print pattern,arr[pattern]}' nowcoder.txt
>>
to 1
welcome 2
nowcoder 3
统计每个用户的进程占用了多少内存,需要注意的是,取值的是RSS那一列。
ps aux | awk 'NR!=1 {a[$1]+=$6} END{for(i in a) print i,a[i]}'
>>
geoclue 16976
rpc 1384
colord 6156
rtkit 1796
rpcuser 1820
polkitd 12324
dbus 4228
nobody 1100
libstor+ 824
avahi 2468
mysql 84804
root 1310236[root@node01 ~]#ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 1.5 0.2 191272 4216 ? Ss 20:13 0:02 /usr/lib/syste
root 2 0.0 0.0 0 0 ? S 20:13 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 20:13 0:00 [kworker/0:
统计当前目录下,*.txt的文件所占空间大小之和
ls -l *.txt | awk '{sum+=$5} END{print sum}'
[root@node01 ~]#ls -l
total 14980
-rw-r--r--. 1 root root 518505 Nov 16 2021 all.sql
-rw-r--r-- 1 root root 8 May 6 16:12 a.log
第五列为文件大小
(二)文件拆分
awk支持重定向符号>,直接将第五列内容相同的行写至一个新文件,且文件名为第五列
awk '{print $0 > $5} file.txt'root@node01 ~]#cat file.txt
rwxr-xr-x. 2 root root 6 Jun 20 2021 Pictures
drwxr-xr-x. 2 root root 6 Jun 20 2021 Public
-rw-r--r-- 1 root root 78 Dec 28 08:43 python.sh
-rwxr-xr-x 2 root root 5259480 Dec 4 02:42 qemu-kvm
-rw-r--r--. 1 root root 38 Jul 13 2021 sed.txt
drwxr-xr-x. 3 root root 25 Jul 16 2021 src
root@node01 ~]#cat Jun
rwxr-xr-x. 2 root root 6 Jun 20 2021 Pictures
drwxr-xr-x. 2 root root 6 Jun 20 2021 Public
(三)处理文本
111:13443
222:13211
111:13643
333:12341
222:12123
按照以下格式输出
[111]
13443
13643
[222]
13211
12123
[333]
12341
awk -v FS=":" '{a[$1] = a[$1] $2 "\n"} END {for (i in a){printf("[%s]\n%s",i,a[i])}}' file.txt
(四)字符串操作
awk 支持对字符串de操作
awk '{if(length($4) == 4) print $2,toupper($3)}' file.txt
length计算字符串长度,toupper函数转换字符串为大写。
比较常用的字符串函数:
index(s, t)
返回子串 t 在 s 中的位置length(s)
返回字符串 s 的长度split(s, a, sep)
分割字符串,并将分割后的各字段存放在数组 a 中substr(s, p, n)
根据参数,返回子串tolower(s)
将字符串转换为小写toupper(s)
将字符串转换为大写substr(str,pos,len)从pos开始的位置,截取len个字符;
substr(str,pos) pos开始的位置,一直截取到最后。
【AWK】awk 基础用法和应用相关推荐
- perl语言中的AWK之基础篇
perl语言中的AWK之基础篇 一:AWK与perl 1. Perl,我们并不陌生了到目前为止,它在web编程中的强大作用,对于每个web开发者而言,重要性不言而喻, 由于perl借取了C.sed.a ...
- awk——awk基础介绍
awk awk基础 awk简介 awk是被设计用于文本处理,并常被用作数据提取和报告工具的解释性程序设计语言.awk的作者这样描述:awk是一个方便的且富有表现力的程序设计语言,它可以应用于各种各样的 ...
- awk ERES 基础表达式符号介绍
awk ERES 基础表达式符号介绍 [liujisheng@MyPcCentOs6 bsh01]$ cat data/regex.txt about ERES test ttttt ...
- day 1-requests基础用法和网页基础学习总结
day 1-requests基础用法和网页基础 1. requests用法 1.认识爬虫 1)爬虫 用程序自动获取网页数据(可以让数据采集的过程变得简单又高效) 2)爬虫流程: 第一步:获取网络数据( ...
- awk ——awk将每个输入行解释为一条记录而将一行上的每个单词(由空格或行由制表符分隔)解释为每个字段。
awk --awk将每个输入行解释为一条记录而将一行上的每个单词(由空格或行由制表符分隔)解释为每个字段. # space.txt root@357c42f4740c:/test# cat space ...
- pyhanlp 基础用法和教程
文章目录 pyhanlp 基础用法和教程 pyhanlp 基础用法和教程 # -*- coding:utf-8 -*- # /usr/bin/python ''' @Author : Errol @D ...
- linux分配端口未抢占端口,Linux命令之awk:基础知识(一)
语法形式: awk [options] 'script' var=value file(s) awk [options] -f scriptfile var=value file(s) 常用选项: - ...
- shell三剑客-awk总结-基础
说明: 1,本文反复阅读.参考和总结自<AWK程序设计语言>第一章节,且对原文语句进行了不少精炼 2,目的为熟练使用awk或者有朝一日快速捡起awk的使用方法 3,本文所有原件获取方式:阿 ...
- Shell编程四剑客之AWK(基础篇)
Shell 编程四剑客之 AWK 概述 其语法参数格式为,AWK 常用参数.变量.函数详解如下: (1) AWK 基本语法参数详解: (2) AWK 内置变量详解: (3) AWK 内置函数详解: ( ...
最新文章
- spark VS Hadoop 两大大数据分析系统深度解读
- ARM 架构(V7,V8),和ARM内核区别,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57
- bilibili怎么设置弹幕数量_python爬虫:bilibili弹幕爬取+词云生成
- DataWhale组队-Pandas(下)缺失数据(打卡)
- PyQt5笔记(06) -- 菜单
- 进程间通信(匿名管道、命名管道、共享内存)
- 一步一步学习SignalR进行实时通信_3_通过CORS解决跨域
- 今天发现的一个小问题,找不到模拟器和手机设备
- 用PYTHON画谢尔宾斯基三角形(代码可复制)
- 工商服务代理行业解决方案
- Win实用 优秀 软件清单推荐
- java输出pdf(pdfptable和pdftcell)
- 中文期刊模板的页面格式,以《电力系统自动化》为例
- VS2017 如何打包软件
- 系统卡顿有服务器硬件的原因,服务器出现卡顿,一般是这个3个原因!
- 1231:最小新整数——贪心
- tcp/ip协议知识详解
- 数值优化:经典随机优化算法及其收敛性与复杂度分析
- sybase函数用法之DateAdd
- 吴恩达 机器学习 ex3
热门文章
- 卡方分布上侧α分位数的近似公式及其证明
- 双硬盘好还是纯固态好学计算机专业,固态硬盘虽好,但是和机械硬盘相比还是有其“不足之处”...
- 【OpenCV4】查找图像,数组中最大最小值 cv::minMaxLoc() 使用详解(c++)
- 【优化】近端梯度下降(Proximal Gradient Descent)求解Lasso线性回归问题
- 学术新秀采访-陆品燕~How To Get Your SIGGRAPH Paper Rejected
- Unity3D Shader 入门
- Tomcat两个项目,一个可以正常访问,另一个报错404
- 腾讯(大连)研发一面-20190620
- 【损失函数系列】softmax loss损失函数详解
- Python PyQt5简介