linux中awk命令(最全面秒懂)

目录

一:linux中awk命令

1.awk命令简介

2.awk作用

3.awk的语法格式

4.解析awk使用方法

5.参数

6.awk的生命周期

二:awk中的预定义变量

三:awk运行处理规则的执行流程

四:awk中的函数

五:awk中的定位

六:比较表达式(匹配文本之内的内容)

七:条件表达式(文本之外的内容)

八:逻辑表达式

九:算数表达式

十:流程控制

十一:实战案例(if判断打印隔五一行线)


一:linux中awk命令

1.awk命令简介

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

image

2.awk作用

awk主要是用来格式化

3.awk的语法格式

awk [参数] [处理内容] [操作对象]

4.解析awk使用方法

print	: 打印
NF		: 统计总字段数
$		: 取值
结合作用:
	$配合NF使用 : NF内存储统计文件内每行的总字段,$存储NF内的值
	NF	:相当于 变量值	$	:相当于 变量名
	print相当于打印 $ 内的内容

image

image

5.参数

print	: 打印
NF		: 统计总字段数
$		: 取值
结合作用:
	$配合NF使用 : NF内存储统计文件内每行的总字段,$存储NF内的值
	NF	:相当于 变量值	$	:相当于 变量名
	print相当于打印 $ 内的内容

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: 'NR == 3{print $0} /etc/passwd'
解析:
	NR  : 行号
NR == 3  : 行号等于3


注意:
$1	     : 是列
NR == 3  : 是行

九:算数表达式

	+	:加
	-	:减
	*	:乘
	/	:除
	%	:求余
	

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

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号模式或绝对模式 7 1.5 目录 7 1.6 suid/guid 7 1.6.1 为什么要使用suid/guid 8 1.6.2 设置suid/guid的例子 8 1.7 chown和chgrp 9 1.7.1 chown举例 9 1.7.2 chgrp举例 9 1.7.3 找出你所属于的用户组 9 1.7.4 找出其他用户所属于的组 10 1.8 umask 10 1.8.1 如何计算umask值 10 1.8.2 常用的umask值 11 1.9 符号链接 12 1.9.1 使用软链接来保存文件的多个映像 12 1.9.2 符号链接举例 12 1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改时间查找文件 17 2.1.7 查找比某个文件新或旧的文件 17 2.1.8 使用type选项 17 2.1.9 使用size选项 18 2.1.10 使用depth选项 18 2.1.11 使用mount选项 18 2.1.12 使用cpio选项 18 2.1.13 使用exec或ok来执行shell命令 19 2.1.14 find命令的例子 20 2.2 xargs 20 2.3 小结 21 第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 3.1.7 删除crontab文件 25 3.1.8 恢复丢失的crontab文件 25 3.2 at命令 25 3.2.1 使用at命令提交命令或脚本 26 3.2.2 列出所提交的作业 27 3.2.3 清除一个作业 27 3.3 &命令 27 3.3.1 向后台提交命令 28 3.3.2 用ps命令查看进程 28 3.3.3 杀死后台进程 28 3.4 nohup命令 29 3.4.1 使用nohup命令提交作业 29 3.4.2 一次提交几个作业 29 3.5 小结 30 第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1 标准输入 40 5.6.2 标准输出 40 5.6.3 标准错误 40 5.7 文件重定向 40 5.7.1 重定向标准输出 41 5.7.2 重定向标准输入 42 5.7.3 重定向标准错误 42 5.8 结合使用标准输出和标准错误 43 5.9 合并标准输出和标准错误 43 5.10 exec 44 5.11 使用文件描述符 44 5.12 小结 45 第6章 命令执行顺序 46 6.1 使用&& 46 6.2 使用|| 46 6.3 用()和{ }将命令结合在一起 47 6.4 小结 48 第二部分 文本过滤 第7章 正则表达式介绍 49 7.1 使用句点匹配单字符 50 7.2 在行首以^匹配字符串或字符序列 50 7.3 在行尾以$匹配字符串或字符 5

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值