linux 三剑客 之 awk

awk的语法

awk 参数 处理规则 操作对象

参数

 参数-F

参数 -F :指定本文分隔符(默认以空格作为分隔符)

	awk -F'/' '{print $NF}' 2.txt :用/作为分隔符,打印最后一列字段
	# 案例:打印系统所有用户的解析器:冒号作为分隔符,最后一个字段就是解析器
	awk -F: '{print $NF}' /etc/passwd

image

awk的生命周期

grep、sed、awk都是读一行处理一行,直到处理完成。
1.接收一行作为输入
2.把刚刚读入进来的文本进行分解
3.使用处理规则处理文本
4.输出一行,赋值给$0($0代表当前行),直到处理完成
5.把处理完成之后的所有的数据交给END{}来再次处理

awk当中的预定义变量

$0 :代表当前行 
	awk  '{print $0 "---"}' 2.txt :打印文件内容,每一行就在后面加---
	
$n : 代表分割后的第n列字段
	awk -F/ '{print $1}' 2.txt :打印文件内容:用/分割后的第1列字段	
	
NF :记录每一行用分隔符后的字段数量
	awk -F/ '{print NF}' 2.txt :NF打印字段数量
	awk -F: '{print $NF}' /etc/passwd :$NF打印最后一列字段
	
NR :记录行号
	awk -F/ '{print NR}' 2.txt
	
FS :指定文本内容的分隔符(默认空格);自定义变量的优先级要高于-F参数
	awk -F/ 'BEGIN{OFS="--"}{print $NF,$1}' 2.txt
	awk -F/ 'BEGIN{OFS="--"}{print $1,$2,$3}' 2.txt

image

image

image

image

image

awk当中处理规则的执行流程

以下至少有一个,最多有四个。执行流程从上到下。

BEGING : 定义变量
// : 正则,匹配
{} : 处理文本
END{} :打印之前统一处理一遍

awk中的函数

print : 打印(前面举了很多例子了)
printf :格式化打印,给个双引号
	awk -F/ 'BEGIN{OFS="|"}{printf"|%-10s|%-10s|\n", $1,$2}' 2.txt
	
	%s : 字符串
	%d : 数字
	- :左对齐
	+ :右对齐
	10 :至少占用10个字符

image

awk中的定位

1.正则表达式 :两个//中间的就是正则表达式
	awk -F/ '/^345/{print $0}' 2.txt
	
	# 忽略大小写怎么写?
	awk -F/ '/qew|QEW|QEw|QeW|qEW/{print $0}' 2.txt
	
2.比较表达式 :比较的是本文内的内容;
	> : 大于
	< : 小于
	>= : 大于等于
	<= : 小于等于
    ~  : 匹配正则
    !~ : 不匹配正则
    
    # 要求打印属组id大于属主id的所有行
		awk -F: '$4 > $3{print $0}' /etc/passwd
	
	# 结尾包含bash的所有行
		awk -F: '$NF ~ /bash/{print $0}' /etc/passwd
		
	# 结尾不包含bash的所有行
		awk -F: '$NF !~ /bash/{print $0}' /etc/passwd
	
3.逻辑表达式: 
	&&	: 逻辑与
	||  :逻辑或
	!	:逻辑非
	# 属主id加属组id大于2000并且相乘大于2000
	awk -F: '$3 + $4 > 2000 && $3 * $4 > 2000{print $0}' /etc/passwd
	# 属主id加属组id大于2000或者相乘大于2000
	awk -F: '$3 + $4 > 2000 || $3 * $4 > 2000{print $0}' /etc/passwd
	# 属主id加属组id不大于2000
	awk -F: '!($3 + $4 > 2000){print $0}' /etc/passwd
		
4.算数表达式:
	+ :加
	- :减
	* :乘
	/ :除
	% :整除
	
	# 要求属组 + 属主的ID 大于 2000
		awk -F: '$3 + $4 > 2000{print $0}' /etc/passwd
	#:要求属组 * 属主的ID 大于 2000
		awk -F: '$3 * $4 > 2000{print $0}' /etc/passwd
	# 要求打印偶数行
		awk -F: 'NR % 2 == 0{print $0}' /etc/passwd
	# 要求打印奇数行
		awk -F: 'NR % 2 == 1{print $0}' /etc/passwd

5.条件表达式:跟比较表达式相似,比较的是自定义的内容;
	== :等于
	> :大于
	< :小于
	>= :大于等于
	<= :小于等于
	# 要求打印第三行
		awk -F/ 'NR==1{print $0}' 2.txt

6.范围表达式:
	# 打印root开头的行到ftp开头的行
		awk -F: '/^root/,/^ftp/{print $0}' /etc/passwd

image

image

image

image

流程控制

流程控制只存在循环之中。

if

# 如果行的第3列字段大于第4列字段,打印0,否则打印1。
	awk -F/ '{if($3>$4){print "0"}else{print "1"}}' 2.txt
# 每隔5行,打印一行横线
    awk -F: '{if(NR%5==0){print "----------------"}print $0}' /etc/passwd
    
格式:	
    if(){} :单条件
    if(){}else{} :双条件
    if(){}else if(){}else{} :多条件

image

 for

# 循环打印每行打印2次
	awk -F/ '{for(i=2;i>0;i--){print $0}}' 2.txt

格式:		
	for(i="初始值";条件判断;游标){}

image

 while

# 循环打印每行打印2次,每次后面加打印次数
	awk -F/ '{i=1; while(i<=2){print $0, i++}}' 2.txt

格式:
	i="初始值"; while(条件判断){}

image

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Linux 的三剑客指的是 awk、sed 和 grep。 awk 是一种用来处理文本文件的工具,它可以根据指定的模式进行自动分割并进行数据处理。 sed 是一种流编辑器,它可以对文本文件进行替换、删除和插入操作。 grep 是一种文本搜索工具,它可以在文本文件中搜索指定的字符串。 ### 回答2: Linux剑客,分别是awk、sed和grep,它们是Linux系统中非常重要的命令行工具,它们通常被称为文本处理工具。这些工具通常被用于筛选、搜索和处理文本文件。 grep是一种常见的文本搜索工具,可以在文件和文件夹中搜索指定的字符串或正则表达式。grep可以搜索多个文件并返回匹配行的输出。它是处理日志文件或查找匹配模式的最佳工具之一。 sed是一种流编辑器,可以按照行处理文本文件。它可以通过替换、删除和插入操作来修改文件内容。在大型文件中查找并替换模式是sed的主要作用。该工具通常在文本文件中提取有用信息是常用。 awk是一种强大的文本操作工具,可以分析大型文本文件并对其进行处理。该工具可以遍历行和列,并提供强大的文本处理工具,如计算、过滤和转换数据。awk的处理速度非常快,适用于处理大型数据文件。 Linux的三剑客awk是最强大的工具,它可以执行复杂的文本数据操作和转换,可大大简化开发和管理过程。sed主要用于简单的文本数据过滤和替换,而grep主要用于搜索文件和定位特定行。 总之,Linux剑客在文本数据处理方面具有不可替代的重要作用。对于Linux操作系统的开发人员和管理员来说,熟练使用这些工具可以提高他们的工作效率,使他们更容易管理和操作文本文件。 ### 回答3: Linux剑客awk sed grep是我们在日常工作中经常使用的三个命令。它们都属于文本处理工具,可以用于查找、处理、分析文本文件等。 首先,grep是最常用的文本搜索工具。grep可以用来快速查找文件中指定的字符串或正则表达式,并将包含该字符串或正则表达式的行打印出来。常用的命令有grep、egrep和fgrep。比如,我们可以使用grep命令来查找一个文件中包含指定关键字的行,可以使用egrep来支持正则表达式搜索,使用fgrep来进行快速搜索,不支持正则表达式。 其次,sed是一种流编辑器,主要用于对文本文件进行替换、删除、添加、插入等操作。sed命令可以通过管道(|)将多个命令组合起来,从而进行复杂的文本操作。sed可以快速完成对文本文件的修改操作,比如替换文件中的某些内容、删除特定的行、在文件中插入新的文本等。sed的命令形式是“command", 比如"s/old/new/g",表示将old替换成new。 最后,awk是一种强大的文本处理工具,主要用于在文本文件中查找、处理以及格式化特定的字段。和grep、sed不同的是,awk更加灵活,可以在处理过程中做到数据过滤和加工,对于大数据的处理特别有用。awk命令的常用语法是"pattern {action}"。其中,pattern代表要匹配的模式,而action代表模式匹配时需要执行的动作,我们可以在其中添加处理语句来对文件进行各种处理操作,比如计算、统计、格式化等。 综上所述,Linux剑客awk sed grep是我们在文本处理工作中不可或缺的三个工具,不同的工具可以用于处理不同的文本操作,也可以用于搭配使用,以完成更加复杂的文本处理工作。对于需要经常处理文本的人员来说,掌握这些工具是非常必要的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万元系数

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值