Linux命令之文本分析工具awk
概述
awk
命令是一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
awk
认为文件都是由单词和各种空白字符组成。 空白字符包括空格、TAB、连续的空格、连续的TAB 域。非空白部分从左到右依次是第一个域、第二个域等等。$1
表示第 1 个域,$2
表示第 2 个域,$0
表示所有域。
语法
该命令的语法如下:
# 其中 pattern 表示 awk 在数据中查找的内容,就是匹配模式,支持正则表达式
# 其中 action 表示是在找到匹配内容时所执行的一系列命令,action 中多条命令之间通过分号分隔
awk [选项] ‘/pattern1/{action1} /pattern2/{action2}...’ 文件名
该命令支持的选项有:
选项 | 说明 |
---|---|
-F fs | 指定输入文件分隔符 |
-v var=val | 赋值一个用户定义变量 |
-f file | 从脚本文件中读取 awk 脚本指令,以取代直接在命令行中输入指令 |
awk
命令支持的常见内置变量(即可以直接使用的变量)有:
内置变量 | 说明 |
---|---|
FILENAME | 文件名 |
NR | 已读的记录数,即行号 |
NF | 浏览记录的域的个数(切割后,列的个数) |
会自动给一行中的每个数据元素分配一个变量。awk
命令默认情况下会将如下变量分配给它在文本行中发现的数据字段(在 awk
中,默认的字段分隔符是任意的空白字符,例如空格或制表符。 在文本行中,每个数据字段都是通过字段分隔符划分的。awk 在读取一行文本时,会用预定义的字段分隔符划分每个数据字段。):
$0
代表整个文本行;$1
代表文本行中的第 1 个数据字段;$2
代表文本行中的第 2 个数据字段;$n
代表文本行中的第 n 个数据字段。
awk
还提供了两种打印输出的函数 print
和 printf
:
print
:其中print
函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。printf
:其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。
注:只有成功匹配了
pattern
的行才会执行action
。
使用
示例 1
搜索 /etc/passwd
文件中以 root
关键字开头的所有行,并输出改行的第 7 列。命令如下:
awk -F ":" '/^root/{print $7}' /etc/passwd
说明如下:
-F ":"
:表示指定各列之间的分隔符是冒号:
。'/^root/{print $7}'
:其中^root
表示匹配以root
开始的行;print $7
表示对于前面查找到的行然后输出第 7 列,其中print
表示打印输出,$7
表示第七列。
示例 2
搜索 /etc/passwd
文件以 root
关键字开头的所有行,并输出该行的第 1 列和第 7 列,中间以 ","
号分割。命令如下:
awk -F ":" '/^root/{print $1","$7}' /etc/passwd
说明如下:
-F ":"
:表示指定各列之间的分隔符是冒号:
。'/^root/{print $1","$7}'
:其中^root
表示匹配以root
开始的行;print $1","$7
中表示输出第 1 列和第 7 列,中间用逗号进行分隔。
注意:如果要连接其他字符串,必须用双引号括起来,但是
$1
这些变量又不能使用双引号。所以"$1,$7"
属于错误语法。
示例 3
只显示 /etc/passwd
文件中的第 1 列和第 7 列,以逗号进行分隔,且在所有行前面添加列名 user, shell
,在最后一行添加 zhangsan, /bin/csh
。命令如下:
awk -F ":" 'BEGIN{print "user, shell"} {print $1", "$7} END{print "zhangsan, /bin/csh"}' /etc/passwd
说明如下:
-F ":"
:表示指定各列之间的分隔符是冒号:
。BEGIN{print "user, shell"}
:表示在所有行之前执行输出user, shell
的操作。{print $1", "$7}
:表示输出第 1 列和第 7 列,之间通过逗号分隔。END{print "zhangsan, /bin/csh"}
:表示在最后一行执行输出zhangsan, /bin/csh
。
注:
BEGIN
表示在所有数据读取行之前执行;END
表示在所有数据执行之后执行。
示例 4
将 /etc/passwd
文件中的用户 ID 增加数值 1 之后再输出。命令格式如下:
awk -v i=1 -F ":" '{print $3+i}' /etc/passwd
说明如下:
-v i=1
:表示声明一个变量i
并且初始值为 1。-F ":"
:表示指定各列之间的分隔符是冒号:
。'{print $3+i}'
:表示将第 3 列的值与变量i
的值相加后输出。
注:在进行变量运算时,直接使用变量名即可,不需要使用
$i
的方式来引用变量值。
示例 5
统计 /etc/passwd
文件中的文件名、每行的行号和每行的列数。命令格式如下:
awk -F ":" '{print "文件名:"FILENAME", 行号:"NR", 列数:"NF}' /etc/passwd
说明如下:
'{print "文件名:"FILENAME", 行号:"NR", 列数:"NF}'
:表示输出文件名、行号和列数。其中FILENAME
是内置变量,存放了文件名;NR
是内置变量,存放了当前行号;NF
是内置变量,存放了当前行的列数。注意,输出字符串必须用双引号""
引起来,但是变量不能引起来。
示例 6
输出 ifconfig
命令输出结果中的空行所在行号。命令格式如下:
ifconfig | awk '/^$/{print NR}'
说明如下:
'/^$/{print NR}'
:表示找到空白行并输出空白行的行号。其中^$
是正则表达式表示匹配空白行;print NR
表示输出前面匹配到的行的行号。
示例 7
输出当前系统中网卡的 IP 地址。命令格式如下:
ifconfig | awk '/netmask/{print $2}'
说明:
ifconfig
:该命令查看当前系统的网络信息。awk '/netmask/{print $2}'
:表示找到行中包含netmask
的行,因为包含这个字符串的行中也包含 IP 地址;print $2
表示打印第 2 列,即 IP 地址列。
示例 8
替换字符串 "I am zhangsan"
中的 zhangsan
为 lisi
。命令格式如下:
echo "I am zhangsan" | awk '{$3="lisi"; print $0}'
Linux命令之文本分析工具awk相关推荐
- Linux命令:文本处理工具awk详解
awk命令简介: awk是一个强大的文本分析工具,通常,awk是以文件的每一行,为处理单位的.awk每接收文件的一行,然后执行相应的命令,来处理文本. 1.命令格式: awk 'pattern {a ...
- linux文本分析工具awk解读
awk是一个强大的文本分析工具,相对于grep的查找.sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.awk把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. ...
- 2019-8-20 [Linux] 6.Shell的基本操作 查看 改变 列出 阅读开头/结尾 循环查看 阅读工具less 查找文件内容 文本分析工具AWK 文本编辑工具SED文件find 帮助man
文章目录 6.linuxShell的基本操作 6.1 查看目录和文件 6.1.1 显示当前目录:pwd 6.1.2 改变目录:cd 6.1.3 列出目录内容:ls 1) 查看列表信息 以及详细信息 2 ...
- 【Linux学习】强大的文本分析工具AWK
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符. 调用AWK: 1.命令行 ...
- linux命令合并文本为一行,awk实际应用:文本合并
请使用awk命令将如下两份文件中名字相同的两行合并起来. [root@localhost ~]# cat 1.txt 韩海林 21岁 海林韩 23岁 韩林海 22岁 林海韩 24岁 [root@loc ...
- awk文本分析工具用法
文本分析工具 awk awkawk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将 ...
- linux基础--awk文本分析工具详解
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- linux文本分析利器awk
转 快速理解linux文本分析利器awk 原文链接 杜亦舒 性能与架构 awk是什么 如果工作中需要操作linux比较多,那么awk是非常值得学习的 awk是一个极其强大的文本分析工具,把文件逐行的读 ...
- linux基于文本的配置工具,Linux基本配置和管理 3 ---- Linux命令行文本处理工具
1 文件浏览(简单回顾) 1 cat 查看文件的内容 2 more 以翻页的形式查看,但是只能向下翻页 3 less 以翻页的形式查看,但是能够支持向上和向下翻页 4 head 默认是查看前10行,但 ...
- shell编程之文本处理工具awk
shell编程之文本处理工具awk 文章目录 shell编程之文本处理工具awk 一.awk介绍 1. awk概述 2. awk能干啥? 二.awk使用方式 1. ==命令行模式使用== ㈠ 语法结构 ...
最新文章
- 040_CSS3背景
- 评选 cms_十大评选和编辑精选:12月评论
- Linux编程(9)_进程
- 吸引人才的十大顶尖运营机制
- 每周一书-《程序开发心理学(银年纪念版)》
- 资源 | 没有数学和编程基础,这几个数据科学项目了解一下
- 泡沫下的破浪者,智能语音产品到底落地何处?
- 解决:IDEA2017/2019与Maven3.6.3不兼容的导致的unable to import maven project: see logs for details问题
- 电视家鸿蒙系统,ZNDS智能电视强烈推荐:机顶盒上好用的四款软件!
- bum报文_数据中心VxLAN技术概念和原理解读
- 卡方检定、fisher精确检定
- 优化百度ueditor编辑器,增加秀米插件、手机端预览等功能,与egg-ueditor完美结合
- 小米手机与计算机如何连接网络连接,小米手机连接不上电脑怎么办 图文教你小米手机怎么连接电脑...
- 机器学习理论知识的自学整理(持续更新,建议收藏)
- SQL Server2019安装步骤(超详细 附下载链接)
- XGBoost原理介绍
- 究竟什么是项目管理?它的主要内容是什么呢?
- 前序中序、中序后序以及前序后序构造二叉树
- 农场世界农场游戏开发
- 医学检验技术与计算机的发展,医学检验专业发展现状与前景
热门文章
- C语言常见的关键字汇总
- 编译linux内核成vmlinuz,Linux内核vmlinuz文件认识
- 计算机专业课操作系统,考研计算机专业课操作系统复习要点
- 〖Python 数据库开发实战 - MySQL篇㉞〗- 综合案例 - 新闻管理系统数据库设计的基本属性
- 如何使用API爬取数据,它和网页爬虫有什么区别?
- win7下Visual Studio 2012 update4、AutoCAD 2016和二次开发插件ObjectARX2016环境安装及配置
- wxWindows Frame程序简化版
- wxWindows一些网文
- Java Lambda 表达式
- 【Redis系列】Redis常用数据类型命令大全,6K字爆肝整理,路过不容错过