如果不好理解可以看图,图中有代码以及运行结果,就能明白。

目录

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命令初级、高级篇(详细)相关推荐

  1. redis常用命令(高级篇)

    在我们学习过r edis一些基础命令后,再来学习一下redis高级篇的命令,下面列举一些常用的,可以供大家学习参考: 1.[ mset key1 value1 key2 value2 ... keyN ...

  2. 『高级篇』docker之安全认证kubernetes命令熟悉(40)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之安全认证kubernetes命令熟悉(40) 安全版的kubernetes集群我们部署完成了. 下面我 ...

  3. 人工智能(10)---机器学习知识体系篇(初级篇,中级篇,高级篇)

    机器学习知识体系篇(初级篇,中级篇,高级篇) 下面是自己总结一套人工智能机器学习整个知识体系,一起学习,有总结不到位的希望大家给出纠正! 一 人工智能基础语法篇 二 人工智能中级篇 三 人工智能高级篇

  4. git命令学习第二站——高级篇

    在高级篇,我们就可以在整个图上自由的游走了.本章主要介绍3个部分:绝对引用,相对引用和撤销更改. 绝对引用 2.1关 这里介绍了一个重要的概念就是HEAD,其实HEAD指向的就是当前的执行的节点,我们 ...

  5. 《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 ...

  6. Linux中的高级文本处理命令,cut命令,sed命令,awk命令

    1.2.1 cut命令 cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields    ## 用于有特定分隔字符 [r ...

  7. awk if 不包含_linux高级运维必会命令——AWK命令详解及实例分享

    一.awk简介 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语言: AWK ...

  8. 【Linux篇】awk命令详解

    文章目录 awk 命令 1. 基本用法 2. 工作流程 3. 常用选项参数说明 4. 实操案例 5. 常用awk的内置变量 6. awk程序的优先级 awk 命令 一个强大的文本分析工具,把文件逐行的 ...

  9. AWK用法示例 awk命令

    AWK:Linux 管理员的智能工具包 作者 Emmett Dulaney AWK 实用工具带有其自己的自包含语言,它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一.这种编程及 ...

最新文章

  1. 艾伟:C#对游戏手柄的编程开发-API篇(2)
  2. struts2拦截器遇到的问题
  3. Spring Boot Runner启动器
  4. Python进阶之路:namedtuple
  5. idea搭建maven项目关于数据库连接jar包版本问题解决方案
  6. python做简单温度转华氏_python温度转换华氏温度实现代码
  7. 【CCCC】L3-015 球队“食物链” (30分),搜索排列
  8. iOS开发之一句代码检测APP版本的更新
  9. 沟通成本:信任,外包永远的痛——外包实践(65)
  10. 企业微信网页应用开发 - 权限验证
  11. java gwt_gwt中java与js的相互调用 | 学步园
  12. 安装office2013报安装程序找不到OneNote.zh-cn、安装源不存在
  13. 荣耀4a刷android 6,华为荣耀4a刷机教程_华为荣耀4a强刷官方系统包
  14. \node_modules\node-sass\build\src\libsass.vcxproj(20,3): error MSB4019: 未找到导入的项目“D:\Microsoft.Cpp.De
  15. WPF解决方案和项目结构
  16. 求解大规模稀疏多目标优化问题的一种进化算法(SparseEA)笔记
  17. 西门子PLC1200/1500配方实例程序
  18. 14_自定义ItemDecoration实现qq好友列表分组效果
  19. Importerror: libgl.so.1: cannot open shared object file: no such file or directory
  20. Docker学习之基础篇

热门文章

  1. phpexcel手册
  2. 虚拟机中Operating System not found 解决方法
  3. Javaweb入门到实战(三)过滤器、拦截器、jdbc详解
  4. 第一次接触HTML5 CSS3
  5. 在Android手机上编写并运行Lua脚本
  6. vue3+element-plus实现日历组件农历显示且带列表数据
  7. 香港IT软件开发服务公司Alpha Technology 申请纳斯达克IPO上市
  8. 值得一听,改变人生的21个演讲
  9. 人工智能 机器学习 数据挖掘的区别
  10. 给自己的html5加上背景音乐,网页加背景音乐用JS控制播放 HTML5 - audio