Linux awk命令详解
awk 是除了 sed 命令之外,Linux 系统中另一个功能比较强大的数据处理工具。下面良许小编就将从几个方面对于 Linux awk命令详解命令进行详述,希望对大家有所帮助。
和 sed 命令类似,awk 命令也是逐行扫描文件(从第一行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;否则不对行做任何处理。
awk 在读取文件内容的每一行时,将对比该行是否与给定的模式相匹配,如果匹配,则执行处理过程,否则对该行不做任何处理。如果没有指定处理脚本,则把匹配的行显示到标准输出,即默认处理动作是 print 打印行;如果没有指定模式匹配,则默认匹配所有的数据。
awk 有两个特殊的模式:BEGIN 和 END,它们被放置在没有读取任何数据之前以及在所有的数据读取完成以后执行。在读取文件内容前,BEGIN 后面的指令将被执行,然后读取文件内容并判断是否与特定的模式匹配,如果匹配,则执行正常模式后面的动作指令,最后执行 END 模式命令,并输出文档处理后的结果。
awk 的工作流程图如图 1 所示。
awk 命令基本语法格式如下:
[root@liangxu ~]# awk [选项] '脚本命令' 文件名
awk 命令常用选项及其功能如表 2 所示。
选 项 | 功 能 |
---|---|
-F fs | 指定以 fs 作为输入行的分隔符,awk 命令默认分隔符为空格或制表符 |
-f file | 从脚本文件中读取 awk 脚本指令,以取代在命令参数中输入处理脚本 |
-v var=val | 在执行处理过程之前,设置一个变量 var,并给其设备初始值为val |
-W compat | 使用兼容模式运行 awk, GUN 扩展选项将被忽略 |
-W copyleft | 输出简短的 GUN 版权信息 |
-W dump-variables[=file] | 打印全局变量(变量名、类型、值)到文件中,如果没有提供文件名,则自动输出到名 为 dump-variables 的文件中 |
awk 的脚本命令主要由 2 部分组成,分别为匹配规则和执行命令。
awk 的匹配规则,和 sed 命令中的 address 部分作用相同,用来指定脚本命令可以作用到文本内容中的具体行,可以使用字符串或者正则表达式指定。另外,整个脚本命令是使用的单引号(' '),而其中的执行命令部分需要使用花括号“{}”括起来。
注意,在 awk 程序执行时,如果没有指定执行命令,则默认会把匹配的行输出;如果不指定匹配规则,则默认匹配文本中所有的行。
awk 的主要特性之一是其处理文本文件中数据的能力,它会自动给每行中的每个数据元素分配一个变量。
awk 的内置变量及功能如表 3 所示。
变 量 | 功 能 |
---|---|
$0 | 当前记录 |
1 1~1 n | 当前记录的第 n 个字段 |
ARGC | 命令行参数个数 |
FILENAME | 当前输入文档的名称 |
FNR | 当前输入文档的当前记录编号,尤其是当有多个输入文档时有用 |
NR | 输入流的当前记录编号 |
NF | 当前记录的字段个数 |
FS | 字段分隔符 |
OFS | 输入字段分隔符,默认为空格 |
ORS | 输入记录分隔符,默认为换行符 \n |
RS | 输入记录分隔符,默认为换行符 \n |
【例 1】输出当前文档的当前行编号。 创建 1 个样本文件,命名为 text,在样本文件中写入如下内容:
www.lxlinux.net/
1234
在终端页面中输入如下命令:
[root@liangxu ~]# awk '{print FNR}' text 1 2 3
表达式由变量、常量、函数、正则表达式和操作符组成,awk 中变量有字符变量和数字变量。如果在 awk 中定义的变量没有初始化,则初始值为空字符或 0。当字符操作时必须加引号。操作符及含义如表 3 所示。
操作符 | 含义 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 求余 |
^ | 幂运算 |
++ | 自加1 |
-- | 自减1 |
+= | 相加后赋值给变量 |
= | 相减后赋值给变量 |
氺= | 相乘后赋值给变量 |
/= | 相除后赋值给变量 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
= | 等于 |
!= | 不等于 |
〜 | 匹配正则表达式 |
!〜 | 不匹配正则表达式 |
&& | 与 |
II | 或 |
例如 awk 赋值运算符,a+5 等价于 a=a+5,如下所示:
[root@liangxu ~]# awk 'BEGIN{a=2; a+=2;print a}' 4
除此之外,awk 还支持 if 条件判断、while 和 for 循环语句等。
- if 条件判断语句。if 语句基本格式有两种:
if(表达式) 动作1 else 动作2
或者
if(表达式) 动作1;else 动作2
如果表达式的判断结果为真,则执行动作 1,否则执行动作 2。
例如,判断 boot 分区可用容量小于 20MB 时报警,否则显示 OK,如下所示:
[root@liangxu ~]# df | grep "boot" | awk '{if ($4<20000) print "Alert"; else print "OK"}' OK
- while 循环语句。while 循环语句基本格式有两种:
while(条件) 动作
或者
do 动作 while(条件)
while 循环语句如下所示:
[root@liangxu ~]# awk 'i=1 {} BEGIN { while(i<=10) {++i; print i}}' 1 2 3 4 ...... 10 11
- for循环语句。for 循环语句基本格式如下:
for(变量;条件;计数器) 动作
for 循环语句如下所示:
[root@liangxu ~]# awk 'BEGIN { for(i=1; i<=10; i++) print i}' 1 2 3 ...... 9 10
作者:用户3026598806652
链接:https://juejin.cn/post/6922355288901156878
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Linux awk命令详解相关推荐
- linux awk命令详解,使用system来内嵌系统命令,批量github,批量批下载视频, awk合并两列...
linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...
- 深度学企业linux awk命令详解与应用(下篇)
开篇语: 我们在<一篇速学企业linux awk命令详解与应用(上篇)>中介绍了 awk 的基本用法,其实在awk 脚本程序中,还支持使用一些编程语言,比如变量.数组.分支结构(if-th ...
- linux awk命令根据分隔符输出,Linux运维知识之Linux awk命令详解
本文主要向大家介绍了Linux运维知识之Linux awk命令详解,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. awk :适用程序,一种unix工具 就是一个强大的文本分析工 ...
- linux下awk命令详解,Linux文件处理awk命令-linux awk命令详解-嗨客网
Linux文件处理awk命令详解教程 Linux awk命令说明 awk 是一个强大的文本分析工具,相对于 awk 有 3 个不同版本: awk.nawk 和 gawk,未作特别说明,一般指 gawk ...
- Linux awk命令详解??????????(研究)
http://blog.chinaunix.net/uid-25120309-id-3801250.html 一. AWK 说明 awk是一种编程语言,用于在linux/unix下对文本和数据进 ...
- linux awk命令详解(一) awk语法 awk运算 awk数组
===============================原文地址http://www.cnblogs.com/emanlee/p/3327576.html 好文章!!! Table of Con ...
- linux中awk命令是什么,Linux awk命令详解
awk 是除了 sed 命令之外,Linux 系统中另一个功能比较强大的数据处理工具. 和 sed 命令类似,awk 命令也是逐行扫描文件(从第一行到最后一行),寻找含有目标文本的行,如果匹配成功,则 ...
- 【转】Linux awk命令详解
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...
- [转]linux awk命令详解
原文链接 : http://blog.chinaunix.net/uid-23302288-id-3785105.html awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或 ...
最新文章
- 牛客 2018年长沙理工大学第十三届程序设计竞赛 G-逃离迷宫
- 一个好的设计应当具备哪些要素
- split函数python_Python字符串split函数知多少【Python每日一个知识点第75期】
- JQ插件 jquery mobiscroll
- 云服务器ECS共享标准型S6全新发布, 行业内最具性价比
- Java 借助ImageMagic实现图片编辑服务
- 【kafka】kafka消费者报错INVALID_FETCH_SESSION_EPOCH
- How to stop looking for someone perfect and find someone to love
- Beta Daily Scrum 第五天
- 洛谷 P1168 中位数 堆
- 2、宽带Doherty放大器ADS仿真(带版图)
- 关于如何把支持VS2015的插件BabeLua改成支持VS2017
- cass简码大全_Cass简码成图
- 苹果电脑上好用的几款数据备份工具
- OpenCV角点检测—Harris,SIFT,ORB(7)
- c语言左移函数_corl_,crol(crol函数怎么左移)
- 【Unity游戏开发】不接SDK也能在游戏内拉起加QQ群操作?
- 计算机职业生涯测评,皮纹检测职业版——职业生涯规划指南测评系统
- python获取摄像头型号,python3.6 opencv获取摄像头代码
- 加快BITMAP像素访问速度,取代GetPixel
热门文章
- 使用awk数组进行求和
- 台式电脑安装两个系统的步骤和方法
- day3分支和循环作业
- 【贪婪匹配】和【非贪婪匹配】
- 【sql的mapper.xml文件】完美去除idea中mapper.xml文件中的黄色绿色背景色
- 我与‘or’、‘|’和‘||’不得不说的故事
- java中main方法的作用是什么_java中main方法是什么
- 超详细教程-Django实现Ajax局部刷新
- 怎样进服务器手机版视频文件,手机播放云服务器中的视频文件
- 刷新头的升级版,仿QQ的红色消息小球