linux中awk命令(最全面秒懂)
一:linux中awk命令
1.awk命令简介
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符
linux中有三剑客之称:
三剑客之首就是 AWK
三剑客功能:
grep : 过滤文本
sed : 修改文本
awk : 处理文本

2.awk作用
awk主要是用来格式化
3.awk的语法格式
awk [参数] [处理内容] [操作对象]
4.解析awk使用方法
print : 打印
NF : 统计总字段数
$ : 取值
结合作用:
$配合NF使用 : NF内存储统计文件内每行的总字段,$存储NF内的值
NF :相当于 变量值 $ :相当于 变量名
print相当于打印 $ 内的内容


5.参数
-F : 指定文本分隔符 (本身默认是以空格作为分隔符)
实战案例:
awd -F'f' '{print $NF}' 1.txt
解析:
-F'f' : 指定f为分隔符
6.awk的生命周期
grep,sed和awk都是读一行处理一行,直到处理完成。
1. 接收一行作为输入
2. 把刚刚读入进来得到文本进行分解
3. 使用处理规则处理文本
4. 输入一行,赋值给$0,直至处理完成
5. 把处理完成之后的所有数据交给END{}来再次处理
二:awk中的预定义变量
$0 : 代表当前行(相当于匹配所有)
awk -F: '{print $0, "---"}' /etc/passwd
$n : 代表第n列
案例1:(以:为分隔符)
awk -F: '{print $1}' /etc/passwd
案例2:(默认空格为分隔符)
awk '{print $1}' /etc/passwd
NF : 记录当前统计总字段数
案例1:(以:为分隔符 统计文件内每行内的行数)
awk -F: '{print NF}' /etc/passwd
案例2:(以:为分隔符 统计文件内每行总字段 并打印每行统计行数)
awk -F: '{print $NF}' /etc/passwd
NR : 用来记录行号
案例1:
awk -F: '{print NR}' /etc/passwd
FS : 指定文本内容分隔符(默认是空格)
案例1:
awk 'BEGIN{FS=":"}{print $NF, $1}' /etc/passwd
解析:
BEGIN{FS=":"} : 相当于指定以 : 为分隔符
$NF : 存储以 : 分隔符的最后一列
$1 : 存储以 : 分隔符的第一列
print : 打印
OFS : 指定打印分隔符(默认空格)
案例1:(输出的意思 分隔符会打印出来)
awk -F: 'BEGIN{OFS=" >>> "}{print $NF, $1}' /etc/passwd
FS 的优先级要高于 -F
解析:
BEGIN{OFS=" >>> "} : 指定打印分隔符
$NF : 存储以 >>> 分隔符的最后一列
$1 : 存储以 >>> 分隔符的第一列
print : 打印
三:awk运行处理规则的执行流程
1. BEGIN{} : 最开始执行
2. // : 正则
3. {} : 循环体
4. END{} : 最后执行
这里面最少有一个,最多有四个!
四:awk中的函数
print : 打印
printf : 格式化打印
%s : 字符串
%d : 数字
- : 左对齐
+ : 右对齐
15 : 至少占用15字符
awk中函数(格式化打印)
案例1:
awk -F: 'BEGIN{OFS=" | "}{printf "|%+15s|%-15s|\n", $NF, $1}' /etc/passwd
解析:
| : 以 | 为分隔符
|%+15s| : 以 | 为分隔符 %s 配合 printf 使用 代替当前字符串 右对齐 占用15字符
|%-15s| : 以 | 为分隔符 %s 配合 printf 使用 代替当前字符串 左对齐 占用15字符
\n : 换行符
$NF : 存储以 | 为分隔符的最后一列
$1 : 存储以 | 为分隔符的第一列
五:awk中的定位
1.正则表达式
案例1:(awk中匹配有root内容的行)
awk -F: '/root/{print $0}' /etc/passwd
解析:
/root/{print $0} : awk中先执行正则 在执行循环 匹配文件内有root的每一行。
$0 :代表所有
案例2:(awk中匹配root开头的行)
awk -F '/^root/{print $0}' /etc/passwd
六:比较表达式(匹配文本之内的内容)
> : 小于
< : 大于
>= : 小于等于
<= : 大于等于
~ : 正则匹配(包含)
!~ : 正则匹配(不包含)
案例1:
要求打印属组ID大于属主ID的行
awk -F: '$4 > $3{print $0}' /etc/passwd
解析:
$4 : 代表属组所在列
$3 : 代表属主所在列
$0 : 所有行
案例2:
打印结尾包含bash
awk -F: '$NF ~ /bash/{print $0}' /etc/passwd
解析:
$NF ~ /bash/ :尾部最后一列 包含 bash 的行
~ : 包含
a案例3:
打印结尾不包含bash
awk -F '$NF !~ /bash/{print $0}' /etc/passwd
解析:
!~ : 不包含 (将打印其他内容)
七:条件表达式(文本之外的内容)
==
>
<
>=
<=
要求打印第三行
案例1:
awk -F: 'NR == 3{print $0} /etc/passwd'
解析:
NR : 行号
NR == 3 : 行号等于3
注意:
$1 : 是列
NR == 3 : 是行
八:逻辑表达式
&& : 逻辑与
|| : 逻辑或
! : 逻辑非
案例1:(与(两者条件必须都成立))
awk -F: '$3 + $4 > 2000 && $3 * $4 > 2000{print $0}' /etc/passwd
案例2:(或(两者条件一个成立即可))
awk -F: '$3 + $4 > 2000 || $3 * $4 > 2000{print $0}' /etc/passwd
案例3:(非(条件取反))
awk -F: '!($3 + $4 > 2000){print $0}' /etc/passwd
九:算数表达式
+ :加
- :减
* :乘
/ :除
% :求余
1.要求匹配打印出属组 + 属主的ID 大于 2000 的
案例1:
awk -F: '$3 + $4 > 2000{print $0}' /etc/passwd
2.要求属组 * 属主的ID 大于 2000
案例2:
awk -F: '$3 * $4 > 2000{print $0}' /etc/passwd
3.要求打印偶数行
案例3:
awk -F: 'NR % 2 == 0{print $0}' /etc/passwd
解析:
NR :全部行号 除以 2 == 零的 零等于余数
偶数 : 2 4 6...
4.要求打印奇数行
案例4:
awk -F: 'NR % 2 == 1{print $0}' /etc/passwd
NR :全部行号 除以 2 == 1的 零等于奇数
奇数: 1 3 5...
十:流程控制
简介:
流程控制只存在循环之中
if:
awk -F: '{if($3>$4){print "大于"}else{print "小于或等于"}}' /etc/passwd
解析:
判断文件 第三列大于第四列的话打印(大于) 不大于 else
if 使用格式:
if(){} : 但分支
if(){}else{} : 双分支
if(){}else if(){}else{} : 多分支
for每一行打印10次
for 使用格式
awk -F: '{for(i=10;i>0;i--){print $0}}' /etc/passwd
解析:
i-- 相当于python中的 i-=1 : i=i-1
减到条件不成立为止
格式:
fro(i="初始值":条件判断:游标){}
while每一行打印10次
while 使用格式
awk -F: '{i=1; while(i<10){print $0, i++}}' /etc/passwd
解析:
i++ 相当于python中的 i+=1
加到条件不成立为止
格式:
while(条件判断){}
十一:实战案例(if判断打印隔五一行线)
1.使用if判断
每隔5行,打印一行横线
awk -F: '{if(NR%5==0){print "----------"}print $0}' /etc/passwd
解析:
1. NR : 每一行的行号
2. 行号 除以 5 ==0
3. 打印一行
以此类推 4%5=0.8

linux中awk命令(最全面秒懂)的更多相关文章
- linux中awk命令详解(最全面秒懂)
一:linux中awk命令 1.awk命令简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具. 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinber ...
- linux中awk命令学习
awk是一个强大的文本分析工具,awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. 通常获取某一行时,我们会使用 “grep 关键字“进行查找,但在读取某一列时, ...
- Linux 中 awk命令应用
ls -la | awk '{printf ("%8s %8s %8s %8s %8s %8s %8s %8s %8s\n",$1,$2,$3,$4,$5,$6,$7,$8,sub ...
- Linux中awk命令的简单用法
一.用例1: cat /proc/meminfo|grep "MemTotal"|awk '{print $2}' 说明,$2表示第2位,$0表示全部,如需表示$,可用$$转义.
- Linux中exec命令相关
Linux中exec命令相关 exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. b ...
- linux中awk的使用
在linux中awk绝对是核心工具,特别是在查找搜索这一领域,和掌握sed命令一样重要 下面为awk的一些基本知识,基于这些知识,可以让你随意操控一个文件: 在awk中:()括号为条件块,{}为执行的 ...
- linux中grep命令的使用
转载:http://blog.csdn.net/universsky/article/details/8866402 linux中grep命令的使用 grep (global search regul ...
- [转帖]Linux中awk工具的使用
Linux中awk工具的使用 2018年10月09日 17:26:20 谢公子 阅读数 2170更多 分类专栏: linux系统安全 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权 ...
- linux中touch命令参数修改文件的时间戳(转)
linux中touch命令参数不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件,以下是linux中touch命令参数的使用方法: touch [-acm][-r ...
随机推荐
- 【LeetCode】146. LRU Cache 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典+双向链表 日期 题目地址:https://le ...
- 【九度OJ】题目1196:成绩排序 解题报告
[九度OJ]题目1196:成绩排序 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1196 题目描述: 用一维数组存储学号和成绩,然后 ...
- 【LeetCode】937. Reorder Log Files 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 分割和排序 日期 题目地址:https://leet ...
- 【LeetCode】219. Contains Duplicate II 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 使用set 使用字典 日期 题目地址:https:/ ...
- D. Water Tree
D. Water Tree time limit per test 4 seconds memory limit per test 256 megabytes input standard input ...
- 1048 - Conquering Keokradong
1048 - Conquering Keokradong PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: ...
- visual studio code的python编程中遇到的SyntaxError:invalid syntax问题的原因和解决办法
一.问题重现描述 1.最开始,正常执行语句 2.当我在"终端窗口"输入python进入交互模式后,再选择默认的"在终端中运行python文件"运行代码报错 3. ...
- python学习第三天:python基础(数据类型和变量)
注释 以 # 开头的语句是注释,如,注释不会被编译运行: 格式 当语句以冒号:结尾时,缩进的语句视为代码块.按照约定俗成的管理,应该始终坚持使用4个空格的缩进(在文本编辑器中,需要设置把Tab自动转 ...
- 《手把手教你》系列技巧篇(五十三)-java+ selenium自动化测试-上传文件-上篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- 【17MKH】我在框架中对.Net依赖注入的扩展
说明 依赖注入(DI)是控制反转(IoC)的一种技术实现,它应该算是.Net中最核心,也是最基本的一个功能.但是官方只是实现了基本的功能和扩展方法,而我呢,在自己的框架 https://github. ...