很久之前学的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 基础用法和应用相关推荐

  1. perl语言中的AWK之基础篇

    perl语言中的AWK之基础篇 一:AWK与perl 1. Perl,我们并不陌生了到目前为止,它在web编程中的强大作用,对于每个web开发者而言,重要性不言而喻, 由于perl借取了C.sed.a ...

  2. awk——awk基础介绍

    awk awk基础 awk简介 awk是被设计用于文本处理,并常被用作数据提取和报告工具的解释性程序设计语言.awk的作者这样描述:awk是一个方便的且富有表现力的程序设计语言,它可以应用于各种各样的 ...

  3. awk ERES 基础表达式符号介绍

    awk ERES 基础表达式符号介绍 [liujisheng@MyPcCentOs6 bsh01]$ cat data/regex.txt     about ERES test     ttttt ...

  4. day 1-requests基础用法和网页基础学习总结

    day 1-requests基础用法和网页基础 1. requests用法 1.认识爬虫 1)爬虫 用程序自动获取网页数据(可以让数据采集的过程变得简单又高效) 2)爬虫流程: 第一步:获取网络数据( ...

  5. awk ——awk将每个输入行解释为一条记录而将一行上的每个单词(由空格或行由制表符分隔)解释为每个字段。

    awk --awk将每个输入行解释为一条记录而将一行上的每个单词(由空格或行由制表符分隔)解释为每个字段. # space.txt root@357c42f4740c:/test# cat space ...

  6. pyhanlp 基础用法和教程

    文章目录 pyhanlp 基础用法和教程 pyhanlp 基础用法和教程 # -*- coding:utf-8 -*- # /usr/bin/python ''' @Author : Errol @D ...

  7. linux分配端口未抢占端口,Linux命令之awk:基础知识(一)

    语法形式: awk [options] 'script' var=value file(s) awk [options] -f scriptfile var=value file(s) 常用选项: - ...

  8. shell三剑客-awk总结-基础

    说明: 1,本文反复阅读.参考和总结自<AWK程序设计语言>第一章节,且对原文语句进行了不少精炼 2,目的为熟练使用awk或者有朝一日快速捡起awk的使用方法 3,本文所有原件获取方式:阿 ...

  9. Shell编程四剑客之AWK(基础篇)

    Shell 编程四剑客之 AWK 概述 其语法参数格式为,AWK 常用参数.变量.函数详解如下: (1) AWK 基本语法参数详解: (2) AWK 内置变量详解: (3) AWK 内置函数详解: ( ...

最新文章

  1. spark VS Hadoop 两大大数据分析系统深度解读
  2. ARM 架构(V7,V8),和ARM内核区别,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57
  3. bilibili怎么设置弹幕数量_python爬虫:bilibili弹幕爬取+词云生成
  4. DataWhale组队-Pandas(下)缺失数据(打卡)
  5. PyQt5笔记(06) -- 菜单
  6. 进程间通信(匿名管道、命名管道、共享内存)
  7. 一步一步学习SignalR进行实时通信_3_通过CORS解决跨域
  8. 今天发现的一个小问题,找不到模拟器和手机设备
  9. 用PYTHON画谢尔宾斯基三角形(代码可复制)
  10. 工商服务代理行业解决方案
  11. Win实用 优秀 软件清单推荐
  12. java输出pdf(pdfptable和pdftcell)
  13. 中文期刊模板的页面格式,以《电力系统自动化》为例
  14. VS2017 如何打包软件
  15. 系统卡顿有服务器硬件的原因,服务器出现卡顿,一般是这个3个原因!
  16. 1231:最小新整数——贪心
  17. tcp/ip协议知识详解
  18. 数值优化:经典随机优化算法及其收敛性与复杂度分析
  19. sybase函数用法之DateAdd
  20. 吴恩达 机器学习 ex3

热门文章

  1. 卡方分布上侧α分位数的近似公式及其证明
  2. 双硬盘好还是纯固态好学计算机专业,固态硬盘虽好,但是和机械硬盘相比还是有其“不足之处”...
  3. 【OpenCV4】查找图像,数组中最大最小值 cv::minMaxLoc() 使用详解(c++)
  4. 【优化】近端梯度下降(Proximal Gradient Descent)求解Lasso线性回归问题
  5. 学术新秀采访-陆品燕~How To Get Your SIGGRAPH Paper Rejected
  6. Unity3D Shader 入门
  7. Tomcat两个项目,一个可以正常访问,另一个报错404
  8. 腾讯(大连)研发一面-20190620
  9. 【损失函数系列】softmax loss损失函数详解
  10. Python PyQt5简介