linux中awk命令(最全面秒懂)_linux awk-程序员宅基地

技术标签: 运维  linux  服务器  

目录

一: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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44657888/article/details/134817128

智能推荐

MPEG TS流简介-程序员宅基地

文章浏览阅读3.1k次。TS简介MPEG-TS(Transport stream)即Mpeg传输流定义于ITU-T Rec. H.222.0和ISO 13818-1标准中,属于MPEG2的系统层。MPEG2-TS面向的传输介质是网络和卫星等可靠性较低的传输介质,这一点与面向较可靠介质如DVD等的MPEG PS不同。1. TS数据包TS流由TS数据包即Transport stream packet组成。TS p...

Deepin wine QQ/微信中文显示为方块的原因之一_wine 字体方块-程序员宅基地

文章浏览阅读984次。问题原因:目录下~/.deepinwine,查找乱码的应用Deepin-QQ、Deepin-WeChat,相同路径/drive_c/windows/Fonts下查看是否有字体,笔者发现没有任何字体,这就是原因所致,wine程序会在此处寻找字体,而不能直接利用linux系统的字体解决方法:把/usr/share/fonts/Fonts_Win下字体复制到这里,使wine应用程序能找到至少一种fallback字体,也可以在别的地方的fonts问价夹下,拷贝.ttf字体文件到这里..._wine 字体方块

整个元素周期表通用,AI 即时预测材料结构与特性-程序员宅基地

文章浏览阅读264次。编辑 | 绿萝材料的性质由其原子排列决定。然而,现有的获得这种排列的方法要么过于昂贵,要么对许多元素无效。现在,加州大学圣地亚哥分校纳米工程系的研究人员开发了一种人工智能算法,可以几乎即时地预测任何材料(无论是现有材料还是新材料)的结构和动态特性。该算法被称为 M3GNet,用于开发 matterverse.ai 数据库,该数据库包含超过 3100 万种尚未合成的材料,其特性由机器学习算法预测。M..._人工智能预测材料属性

Docker & Nvidia-docker 镜像基础操作_dokcer怎么使用nvidia作为基础镜像-程序员宅基地

文章浏览阅读5.8k次,点赞2次,收藏25次。简述 docker & nvidia-docker感觉是深度学习的环境配置与部署简化很多,下面记录一下基础的命令,为自己后续用到查阅。在使用之前请先安装好NVIDIA驱动,CUDA以及docker & nvidia-docker的基本环境。docker & nvidia-docker 导入与导出镜像导出镜像:nvidia-docker save -o /save_p..._dokcer怎么使用nvidia作为基础镜像

测试生成攻击Linux操作系统的木马命令_linux msfvenom -p linux/x64/meterpreter/reverse_tc-程序员宅基地

文章浏览阅读312次,点赞6次,收藏9次。你看你以为黑客有多牛呢,都是在利用别人的工具呢。_linux msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=你的 ip lport=你监

12款程序员专用chrome插件神器推荐_谷歌按键精灵插件中文-程序员宅基地

文章浏览阅读2.8k次。前言对于从事IT行业的我们来说,几乎无时无刻都在用chrome浏览器,因为它给我们的工作和生活带来了极大的便利。今天给大家分享11款牛逼的chrome插件。1. 谷歌翻译很多小伙伴,英语不太好,包括我自己,英语刚过四级。从事软件相关工作时,有时有些吃力,因为很多优秀的技术网站、书籍或者文章都是老外写的,如果因为看不懂就放弃阅读,我们将会少了很多学习和进步的机会。今天分享的第一个神器就是:谷歌翻译。在没使用谷歌翻译之前,访问https://docs.mongodb.com/drivers/java/_谷歌按键精灵插件中文

随便推点

使用R语言保存CSV文件_r软件保存为csv文件-程序员宅基地

文章浏览阅读881次。本文介绍了如何使用R语言保存CSV文件。我们使用write.csv函数将数据框保存为CSV格式。您只需提供要保存的数据对象和文件路径,即可轻松创建CSV文件。CSV文件是一种通用的数据交换格式,在数据分析和数据处理中广泛使用。希望本文对您有所帮助,祝您在R语言中保存CSV文件时顺利进行数据处理和分析!_r软件保存为csv文件

VR技术赋能数字经济发展新机遇,加快构建双循环新发展格局_vr商城建设对区域经济-程序员宅基地

文章浏览阅读498次。当下,数字化浪潮正重塑世界经济发展格局,数字经济正在成为全球经济可持续增长新引擎。我国超大规模的市场经济优势为数字经济发展提供了广阔而丰富的应用场景,也成为推动传统产业升级改造、加快”构建国内国际双循环相互促进的新发展格局“的重要引擎。据国家统计局数据显示:2020年第一季度,我国GDP呈现出6.8%的负增长态势。今年1月份至5月份,与互联网相关的新业态、新模式却继续保持逆势增长。全国实物商品网上零售额同比增长11.5%;实物商品网上零售额占社会消费品零售总额比重为24.3%,比去年同期提高5.4个百分点_vr商城建设对区域经济

HCS12X–数据定义(如何在CodeWarrior中将数据定义到分页区)_codewarrior数组如何定义-程序员宅基地

文章浏览阅读384次。由于在暑假匆忙接收的嵌入式项目中需要使用特别大的数组,非分页RAM的内存不够用了,没办法,硬着头皮尝试使用分页RAM,但是完全没有单片机的基础,导致极其的困难。之前写程序都是按照纯软件的思维,主要考虑架构,不会考虑到每个变量具体存在哪个物理地址这么底层的问题,结果被飞思卡尔这分页地址、prm文件什么的搞得一头雾水,而网上的资料又少,讲的又大同小异的笼统,最后写出来的程序因为这分页地址的原因存在各种_codewarrior数组如何定义

wed服务器简介_wed服务器的主要特点之一就是它具有十几个html文件连接到另一个html文件的能力称为-程序员宅基地

摘要:Web服务器是用于提供Web服务的软件,它通过HTTP协议来传输和接收网页和其他资源。在Inteet上,HTTP通信通常在TCP/IP连接上进行,使用端口号80。Apache是一种常见的Web服务器软件,其主程序为httpd,根目录为/var/www/html。

Python调用C++举例_cmake编译 python调用c++ so文件-程序员宅基地

文章浏览阅读435次。使用ctypes模块直接加载so函数为:ctypes.cdll.LoadLibrary("so文件路径")_cmake编译 python调用c++ so文件

配置密钥方法-程序员宅基地

文章浏览阅读1.3k次。1 git config --global user.name “你的账号”2 git config --global user.email “邮箱”3 查询账号 :git config user.name4 ssh-keygen -t rsa -C “邮箱”5 cd ~/.ssh6 cat id_rsa.pub (返回一串密钥字母)7 将其配置在setting下的密钥中..._配置密钥

推荐文章

热门文章

相关标签