文章目录

  • awk 命令
  • 1. 基本用法
  • 2. 工作流程
  • 3. 常用选项参数说明
  • 4. 实操案例
  • 5. 常用awk的内置变量
  • 6. awk程序的优先级

awk 命令

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

1. 基本用法

awk [选项参数] 'pattern1{action1}  pattern2{action2}...' filename

pattern:表示AWK在数据中查找的内容,就是匹配模式。action:在找到匹配内容时所执行的一系列命令。

注意:行匹配语句 awk 只能用单引号。单引号内部可以使用双引号,但是顺序不能错。

2. 工作流程

读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,$NF表示文本行中的最后一个数据字段。默认域分隔符是"空白键" 或 “[tab]键”。

3. 常用选项参数说明

  • -F:指定输入文件折分隔符。
  • -v:赋值一个用户定义变量。
  • -f:引入awk执行脚本。

4. 实操案例

准备数据

[root@jiangnan awk]# cp /etc/passwd ./
[root@jiangnan awk]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
...
[root@jiangnan awk]#
  1. 搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
[root@jiangnan awk]# awk -F: '/^root/{print $7}' passwd
/bin/bash
[root@jiangnan awk]#

-F,指定分隔符为:。print,打印。$7,第7列(域)。
^在root前,表示以指定字符开头,如果没有,则表示有指定字符的行,位置不限。

  1. 搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以","号分割。
[root@jiangnan awk]# awk -F: '/^root/{print $1","$7}' passwd
root,/bin/bash
[root@jiangnan awk]#

注意:只有匹配了pattern的行才会执行action。

  1. 将passwd文件中的用户id增加数值1并输出
[root@jiangnan awk]# awk -v i=1 -F: '{print $3+i}' passwd
1
2
3
4
...
[root@jiangnan awk]#

-v:赋值一个用户定义变量

  1. 如果awk命令是日常重复工作,而又没有太多变化,可以将程序写入文件,每次使用-f调用程序文件就好,方便、高效。
[root@jiangnan awk]# cat abc
{print $1,$3,$NF}
[root@jiangnan awk]# awk -F : -f abc passwd
root 0 /bin/bash
bin 1 /sbin/nologin
daemon 2 /sbin/nologin
adm 3 /sbin/nologin
lp 4 /sbin/nologin
...
[root@jiangnan awk]#

-f:引入awk执行脚本。

  1. 只显示passwd的第一列和第七列,以逗号分割,且在行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai"。
[root@jiangnan awk]# awk -F : 'BEGIN{print "user, shell"} {print $1","$7} END{print "dahaige,/bin/zuishuai"}' passwd
user, shell
root,/bin/bash
bin,/sbin/nologin
...
ntp,/sbin/nologin
dahaige,/bin/zuishuai
[root@jiangnan awk]#

注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

5. 常用awk的内置变量

变量 说明
FILENAME awk浏览的文件名
NR 已读的记录数
NF 浏览记录的域的个数
  1. 统计passwd文件名,每行的行号,每行的列数。
[root@jiangnan awk]# awk -F: '{print "filename:"  FILENAME ", linenumber:" NR  ",columns:" NF}' passwd
filename:passwd, linenumber:1,columns:7
filename:passwd, linenumber:2,columns:7
filename:passwd, linenumber:3,columns:7
filename:passwd, linenumber:4,columns:7
...
filename:passwd, linenumber:24,columns:7
[root@jiangnan awk]#
  1. 查询sed.txt中空行所在的行号
[root@jiangnan awk]# cat sed.txt
1 the quick green fox jumps over the lazy dog.
2 the quick green fox jumps over the lazy dog.3 the quick green fox jumps over the lazy dog.
4 the quick green fox jumps over the lazy dog.
5 the quick green fox jumps over the lazy dog.
[root@jiangnan awk]# awk '/^$/{print NR}' sed.txt
3
[root@jiangnan awk]#
  1. 输出passwd第3行的所有数据
[root@jiangnan awk]# awk 'NR==3{print $0}' passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@jiangnan awk]#
  1. 输出passwd第5行的第6个字段
[root@jiangnan awk]# awk -F: 'NR==5{print $6}' passwd
/var/spool/lpd
[root@jiangnan awk]#
  1. 输出第一个字段为root所在的行
[root@jiangnan awk]# awk -F: '$1=="root"{print $0}' passwd
root:x:0:0:root:/root:/bin/bash
[root@jiangnan awk]#

以上案例要注意需要指定切割符:

  1. 查看已使用的内存
[root@jiangnan awk]# head -2 /proc/meminfo | awk 'NR==1{a=$2}NR==2{b=$2;print (a-b)*100/a "%"}'
95.6707%
[root@jiangnan awk]#

6. awk程序的优先级

BEGIN是优先级最高的代码块,是在执行PROGRAM之前执行的,不需要提供数据源,因为不涉及到任何数据的处理,也不依赖与PROGRAM代码块;PROGRAM是对数据流干什么,是必选代码块,也是默认代码块。所以在执行时必须提供数据源;END是处理完数据流后的操作,如果需要执行END代码块,就必须需要PROGRAM的支持,单个无法执行。

总结起来awk程序运行优先级是:

  • 1)BEGIN: 在开始处理数据流之前执行,可选项
  • 2)program: 如何处理数据流,必选项
  • 3)END: 处理完数据流后执行,可选项
[root@jiangnan awk]# awk 'BEGIN{print "hello ayitula"}{print $0}END{print "bye ayitula"}' sed.txt
hello ayitula
1 the quick green fox jumps over the lazy dog.
2 the quick green fox jumps over the lazy dog.3 the quick green fox jumps over the lazy dog.
4 the quick green fox jumps over the lazy dog.
5 the quick green fox jumps over the lazy dog.
bye ayitula
[root@jiangnan awk]#
[root@jiangnan awk]# awk 'BEGIN{print "hello world"}'
hello world
[root@jiangnan awk]#

可以看出BEGIN不需要数据源(sed.txt)就可以执行。

[root@jiangnan awk]# awk 'END{print "hello world"}'

END没有数据源则无法执行。

点击下方微信公众号,获取更多内容

【Linux篇】awk命令详解相关推荐

  1. linux下awk命令详解,Linux文件处理awk命令-linux awk命令详解-嗨客网

    Linux文件处理awk命令详解教程 Linux awk命令说明 awk 是一个强大的文本分析工具,相对于 awk 有 3 个不同版本: awk.nawk 和 gawk,未作特别说明,一般指 gawk ...

  2. linux $0命令,Linux:awk命令详解

    简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}'   :使用':'来分割这一行,把这一行的第一第四个域打印出来 . AWK命令介绍 awk语言 ...

  3. linux下awk命令详解,Linux:awk命令详解

    个选项,但如果浏览如passwd文件,此文件各域使用冒号作为分隔符,则必须使用-F选项awk -F 'commands' input-file 第二种,将所有awk命令插入一个文件,并使awk程序可执 ...

  4. Linux之awk命令详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  5. 深度学企业linux awk命令详解与应用(下篇)

    开篇语: 我们在<一篇速学企业linux awk命令详解与应用(上篇)>中介绍了 awk 的基本用法,其实在awk 脚本程序中,还支持使用一些编程语言,比如变量.数组.分支结构(if-th ...

  6. linux awk命令详解,使用system来内嵌系统命令,批量github,批量批下载视频, awk合并两列...

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  7. linux awk命令根据分隔符输出,Linux运维知识之Linux awk命令详解

    本文主要向大家介绍了Linux运维知识之Linux awk命令详解,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. awk :适用程序,一种unix工具 就是一个强大的文本分析工 ...

  8. linux三剑客之awk命令详解

    linux三剑客之awk命令详解 awk 是一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件.数据排序.计算以及生成报表等等.awk工具主要用于格式化输出,可以用类似于处理表格的方式处理文 ...

  9. Linux awk命令详解

    awk 是除了 sed 命令之外,Linux 系统中另一个功能比较强大的数据处理工具.下面良许小编就将从几个方面对于 Linux awk命令详解命令进行详述,希望对大家有所帮助. 和 sed 命令类似 ...

  10. linux中jstack命令详解,Linux jstack命令详解

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息. 如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack ...

最新文章

  1. 创建DLL动态链接库——声明导出法
  2. python教程第四版pdf下载-Python参考手册 第4版高清中文PDF下载
  3. leetcode算法题--二叉搜索树的最近公共祖先
  4. 基于FPGA跳舞机实现
  5. 入门Python,总遇到这样那样的安装问题,手把手教会你
  6. CoreGraphics中CGContextAddArcToPoint函数的用法说明
  7. Linux命令(20)linux服务器之间复制文件和目录
  8. python和c语言的区别-c语言和python的区别
  9. POJ 3126 Prime Path 简单广搜(BFS)
  10. 记一次VS Code崩溃的解决(Win10扫描自动回复系统文件)
  11. 解决H61、H81、B85以上的主板安装XP系统蓝屏
  12. vmware 14 pro许可证
  13. 基于SSM+Vue的手机商城销售系统项目
  14. AngularJs $http.post 数据后台获取不到数据问题 的解决过程
  15. 根据M3U8文件地址下载网站上的视频
  16. kafka 报错: IllegalArgumentException: Error creating broker listeners from ‘PLAINTEXT:xxx.xxx.xxx.xx
  17. 《PyTorch机器学习从入门到实战》 例程(PyTorch1.2版本可用)
  18. OpenHarmony分布式软总线与设备认证模块总结
  19. Python实战:淘宝自动抢购
  20. 浙江大学郑强教授的演讲(国民必看)

热门文章

  1. WinForm对话框详解:信息框、文件对话框、功能对话框
  2. 蓝桥杯真题 15省7-牌型种数 小明被劫持到X赌城,被迫与其他3人玩牌。 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,
  3. 正则之贪婪与非贪婪模式
  4. 手机AR APP开发之性能优化
  5. 2018年上半年慈善组织互联网公开募捐事业健康有序发展
  6. CSDN早报-2019-04-28
  7. 第五人格音乐计算机,第五人格BGM大全 第五人格背景音乐大全网易云地址
  8. 小学英语教学与计算机结合论文,浅谈在小学英语教学中与信息技术的有效融合...
  9. Unity3D 入门:Unity 项目版本管理建议使用的 .gitignore 忽略文件和 .gitattributes 文件(2020年4月更新)
  10. CAESAR II 2014 v7.00 WinXP_7-ISO 1DVD管道设计应力分析软件