awk命令初级、高级篇(详细)
如果不好理解可以看图,图中有代码以及运行结果,就能明白。
目录
awk普通参数:
awk参数具体玩法:
1、-F 指定分隔符
2、 -v 指定变量和默认值
3、$NF代表最后一个字段
4、NR 选行
5、&&与
6、||或
7、FS指定分隔符
8、OFS一般与FS或者-F共同使用
9、RS指定结尾符一般与OFS配合
awk之优先级:
awk优先级详解
最高优先级 BEGIN:
默认优先级PROGRAM(对数据源操作)
END最低优先级
awk之模糊匹配
awk命令之控制流写法
awk之if判断语句
awk之for循环
awk之while循环
awk之do...while写法
循环控制语句beak(跳出当前循环)
最后 awk小技巧
awk普通参数:
-F | 指定分隔符 |
---|---|
-v | 指定变量和默认值 |
$NF | 代表最后一个字段 |
NR | 代表第几行 |
&& | 与 |
|| | 或 |
FS | 输入分隔符,与-F分隔符一样 |
OFS | 输出字段分隔符 |
RS | 输入记录分隔符 |
$0 | 显示整行 |
1...N | 第一个字段到第N个字段 |
awk参数具体玩法:
1、-F 指定分隔符
#注意写法细节 awk -F ":" + 空格 + '{print $6}' 中间没有空格报错
tail -1 /etc/passwd | awk -F ":" '{print $6}' #指定分隔符“:”并截取第六个字段
运行结果:
2、 -v 指定变量和默认值
seq 1 10 > 1.txt #生成一个1到10的文件,我想计算出文件内的总和awk -v "a=0" '{a+=$1;print a}' 1.txt | tail -1 #给a赋值为0,让a与文件内的第一个字段相加,最后结果通过tail 打印出来 但是看的出来很麻烦##优先级END 下面会有讲awk -v "a=0" '{a+=$1}END{print a}' 1.txt
运行结果:
3、$NF代表最后一个字段
awk -F ":" 'NR==10{print $NF}' /etc/passwd ##截取/etc/passwd文件下面的第五行,最后一个字段
运行结果:
4、NR 选行
awk NR==44'{print $0}' /etc/passwd #打印/etc/passwd下的第44行,$0代表整行
运行结果:
5、&&与
条件1 && 条件2 都要满足才为真,真返回1,假返回0
awk -v "a=0" 'NR==1{print (a+=$1 > 10) && (a+=$2 >10)}' 2.txt ##如果条件为假则返回0awk -v "a=0" 'NR==1{print (a+=$1 < 10) && (a+=$2 <10)}' 2.txt ##如果为真返回 1
运行结果
6、||或
条件1 || 条件2 ##条件满足一边 为真
awk -v 'a=0' 'NR==1{print (a+=$1 >10) || (a+=$2 < 10)}' 2.txt #两个条件都不满足,返回假,也就是0awk -v 'a=0' 'NR==2{print (a+=$1 >10) || (a+=$2 < 10)}' 2.txt #第二行,两遍条件满足一遍,所以结果为1
##以上代码 给a设置一个变量0 然后让a 去跟第一行的第一个相加 如果大于10 为真,如果为假
运行结果
7、FS指定分隔符
#没有优先级写法
awk '{FS=":"}NR==2{print $1,$2}' 3.txt
#优先级写法
awk 'BEGIN{FS=":"}NR==2{print $1,$2}' 1.txt
运行结果
8、OFS一般与FS或者-F共同使用
写法:
awk -F ":" 'NR==2{OFS="_";print $1,$2}' 1.txt #指定分隔符":",OFS中间的间隔换成你指定的awk 'BEGIN{FS=":";OFS="-"}NR==2{print $1,$2,$3}' 1.txt #FS用法与上面意思相同
运行结果
9、RS指定结尾符一般与OFS配合
写法单独写RS:
awk 'BEGIN{RS=""}{print $0}' 2.txt ##在文本操作的时候结尾默认是回车(\n),RS指定结尾符号
运行结果:
RS与OFS配合使用写法:
注意 如果是$0的话,不会有效果,单独使用是可以,如果配合OFS使用就不能是整行
awk 'BEGIN{RS="";OFS="##"}{print $1,$2,$3}' 2.txt ##RS指定结尾符,OFS指定链接符#也可以指定特殊符号
awk 'BEGIN{RS="";OFS="\n"}{print $1,$2,$3}' 2.txt
运行结果
awk之优先级:
最高:BEGIN是最高优先级,是在执行PROGRAM之前执行的,不需要提供数据源,因为不涉及任何数据,也不依赖PROGRAM代码块;
默认:PROGRAM是对数据流干什么,是必选代码块,也是默认代码块。所以执行的时候必须要加上数据源; 默认优先级(不加优先级就是默认)
最低:END是处理完数据流后,如果需要执行END代码块,就必须要PROGAM的支持,单个无法执行
注意:如果只用最高或者最低优先级,后面跟上数据源(file)不会有效果,只有默认优先级PROGRAM才会有效果
awk优先级详解
最高优先级 BEGIN:
##写法一awk 'BEGIN{print "zhangsan"}' #BEGIN后面不需要加任何数据源,也可以打印内容
运行结果:
##写法二(赋值写法)
awk 'BEGIN{a[1]="zhangsan";a[2]="28";print a[1],a[2]}' #将a[1],a[2]赋值,并打印awk 'BEGIN{name="zhangsan";age="28";print name,age}' #与上面同理
运行结果:
默认优先级PROGRAM(对数据源操作)
比如我想计算机内存使用率(总内存 - 空闲 *100 / 总内存)
awk 'NR==1{a=$2}NR==2{b=$2;print(a-b)*100/a"%"}' /proc/meminfo #将总内存赋值给a,空闲内存赋予b ,在利用算法算出内存使用率,最后加入一个“%”看起来好看
运行结果:
END最低优先级
对数据处理的最后一个值
seq 1 10 > 1.txt #生成一个1到10 的文件awk -v "a=0" '{a+=$1}END{print a}' 1.txt #$1代表第一个字段,将第一个字段的所有数相加
运行结果:
我们把第一个字段加起来了,会发现很多数值,我们就要最后一个结果,我们就加上END看两者的区别
awk之模糊匹配
比如说我想看我的用户信息,我就记得用户是gx开头的,我不打开文件下,我们可以这么做
awk -F ":" '$1 ~ "gx"{print $0}' /etc/passwd #注意“~”匹配查询,后面关键字要用引号引起来一定要双引号
#$1代表第一个字段,可以写成别字段比如第二字段就是$2...#匹配多个写法
awk -F ":" '$1 ~"gx"{print $0};$1 ~ "roo"{print $0}' /etc/passwd
运行结果:
awk命令之控制流写法
参数:
if | 判断控制语句 |
for | 循环语句 |
while |
循环语句 |
do...while | 循环 |
循环控制语句 | break #只有break可以用 |
写法:
awk之if判断语句
awk '{if($1>5)print $1*$2;else print $1/$2}' 2.txt #如果$1大于5,$1乘以$2,否则$1除以$2
运行结果:
awk之for循环
awk '{a=0;for(i=1;i<11;i++){a+=$i}print a}' 2.txt ##初始化值a,然后内容有几行循环就几次,最后将字段相加,就是结果了
运行结果:
awk之while循环
awk '{a=0;b=1;while(b<10){a+=$b;b++}print a}' 2.txt #单条语句写法##逐行写法awk '{
sum=0
i=1
while (i<11) {
sum+=$i
i++
}
print sum
}' 2.txt
运行结果:
awk之do...while写法
awk '{a=0;b=1;do{a+=$b;b++}while (b<11)print a}' 2.txt #do...while 就是将写在while中的语句拿出来写,最后while循环##多行写法
awk '{
a=0
b=1
do{
a+=$b
b++}
while (b<11)
print a}' 2.txt
运行结果:
循环控制语句beak(跳出当前循环)
#单行写法
awk '{a=0;b=1;while(b<4){a+=$b;if(a>150)break;i++}print a}' 2.txt ##判断如果文件当中第一个值大于150的话,就不与后面的值相加,直接打印#多行写法awk '{
a=0
b=1
while (b<11) {
a+=$b
if (a >150)
break
b++
}
print a }' 2.txt
运行结果:
当第一个字段大于150的时候 不相加
文件中第一个字段大于150了就不与其他字段相加了
最后 awk小技巧
awk 'END{print NR}' /etc/passwd #可以打印一个文件下有多少行awk 'END{print $0}' /etc/passwd #可以打印最后一行awk -F ":" 'END{print NF}' /etc/passwd #可以打印文件内最后一行有多少个字段
##如果文件内有分隔符,需要指定分隔符
运行结果:
awk命令初级、高级篇(详细)相关推荐
- redis常用命令(高级篇)
在我们学习过r edis一些基础命令后,再来学习一下redis高级篇的命令,下面列举一些常用的,可以供大家学习参考: 1.[ mset key1 value1 key2 value2 ... keyN ...
- 『高级篇』docker之安全认证kubernetes命令熟悉(40)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之安全认证kubernetes命令熟悉(40) 安全版的kubernetes集群我们部署完成了. 下面我 ...
- 人工智能(10)---机器学习知识体系篇(初级篇,中级篇,高级篇)
机器学习知识体系篇(初级篇,中级篇,高级篇) 下面是自己总结一套人工智能机器学习整个知识体系,一起学习,有总结不到位的希望大家给出纠正! 一 人工智能基础语法篇 二 人工智能中级篇 三 人工智能高级篇
- git命令学习第二站——高级篇
在高级篇,我们就可以在整个图上自由的游走了.本章主要介绍3个部分:绝对引用,相对引用和撤销更改. 绝对引用 2.1关 这里介绍了一个重要的概念就是HEAD,其实HEAD指向的就是当前的执行的节点,我们 ...
- 《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
文章目录 二.高级篇(大厂进阶) 5.Docker-compose容器编排 5.1是什么 5.2能干嘛 5.3去哪下 5.4 Compose核心概念 5.5 Compose使用的三个步骤 5.6 Co ...
- Linux中的高级文本处理命令,cut命令,sed命令,awk命令
1.2.1 cut命令 cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields ## 用于有特定分隔字符 [r ...
- awk if 不包含_linux高级运维必会命令——AWK命令详解及实例分享
一.awk简介 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语言: AWK ...
- 【Linux篇】awk命令详解
文章目录 awk 命令 1. 基本用法 2. 工作流程 3. 常用选项参数说明 4. 实操案例 5. 常用awk的内置变量 6. awk程序的优先级 awk 命令 一个强大的文本分析工具,把文件逐行的 ...
- AWK用法示例 awk命令
AWK:Linux 管理员的智能工具包 作者 Emmett Dulaney AWK 实用工具带有其自己的自包含语言,它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一.这种编程及 ...
最新文章
- 艾伟:C#对游戏手柄的编程开发-API篇(2)
- struts2拦截器遇到的问题
- Spring Boot Runner启动器
- Python进阶之路:namedtuple
- idea搭建maven项目关于数据库连接jar包版本问题解决方案
- python做简单温度转华氏_python温度转换华氏温度实现代码
- 【CCCC】L3-015 球队“食物链” (30分),搜索排列
- iOS开发之一句代码检测APP版本的更新
- 沟通成本:信任,外包永远的痛——外包实践(65)
- 企业微信网页应用开发 - 权限验证
- java gwt_gwt中java与js的相互调用 | 学步园
- 安装office2013报安装程序找不到OneNote.zh-cn、安装源不存在
- 荣耀4a刷android 6,华为荣耀4a刷机教程_华为荣耀4a强刷官方系统包
- \node_modules\node-sass\build\src\libsass.vcxproj(20,3): error MSB4019: 未找到导入的项目“D:\Microsoft.Cpp.De
- WPF解决方案和项目结构
- 求解大规模稀疏多目标优化问题的一种进化算法(SparseEA)笔记
- 西门子PLC1200/1500配方实例程序
- 14_自定义ItemDecoration实现qq好友列表分组效果
- Importerror: libgl.so.1: cannot open shared object file: no such file or directory
- Docker学习之基础篇