文件处理器之——awk
admin
2023-03-05 16:42:35
0

一、awk简介:

awk 是一种编程语言,用于在 linux/unix 下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。

awk 的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有的操作的所指定的行都被处理。

二、awk的两种形式语法格式

awk [options] 'commands' filenames   //过滤并输出文件符合条件的内容
awk [options] -f awk-script-file filenam      //从脚本中调用编辑指令,过滤并输出内容

options:

-F  定义输入字段分隔符,。默认的分隔符是空格或制表符(tab)

commands

BEGIN{} {} END{}
行处理前 行处理 行处理后
BEGIN{} 通常用于定义一些变量,例如 BEGIN{FS=":";OFS="---"}

使用BEGIN语句设置计数和打印头。BEGIN语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文本开始执行,END语句用来在awk完成文本浏览动作后打印输出文本总数和结尾状态。

awk命令格式

awk 'pattern' filename          示例:awk -F: '/root/' /etc/passwd 
awk '{action}' filename         示例:awk -F: '{print $1}' /etc/passwd 
awk 'pattern {action}' filename 示例:awk -F: '/root/{print $1,$3}' /etc/passwd 
                                示例:awk 'BEGIN{FS=":"} /root/{print $1,$3}' /etc/passwd
command |awk 'pattern {action}' 示例:df -P| grep '/' |awk '$4 > 25000 {print $4}'

三、awk工作原理

# awk -F: '{print $1,$3}' /etc/passwd

(1)awk 使用一行作为输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,以换行符结束

(2)然后,行被:(默认为空格或制表符)分解成字段(或域),每个字段存储在已编号的变量中,从$1 开始,最多达 100 个字段

(3)awk 如何知道用空格来分隔字段的呢? 因为有一个内部变量 FS 来确定字段分隔符。初始时,FS 赋为空格

(4)awk 打印字段时,将以设置的方法使用 print 函数打印,awk 在打印的字段间加上空格,因为$1,$3 之间有一个逗号。逗号比较特殊,它映射为另一个内部变量,称为输出字段分隔符 OFS,OFS 默认为空格

(5)awk 输出之后,将从文件中获取另一行,并将其存储在$0 中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。该过程将持续到所有行处理完毕

文件处理器之——awk

四、awk内建变量

FS:指定每行文本的字段分隔符,默认为空格或制表位。(-F)
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)。
$0:当前处理的行的整行内容。
$n:当前处理行的第 n 个字段(第 n 列)。
FILENAME:被处理的文件名。RS:数据记录分隔,默认为\n,即每行为一条记录。


文件处理器之——awk

文件处理器之——awk

五、格式化输出

print函数

# date |awk '{print "Month: " $2 "\nYear: " $NF}'
# awk -F: '{print "username is: " $1 "\t uid is: " $3}' /etc/passwd
# awk -F: '{print "\tusername and uid: " $1,$3 "!"}' /etc/passwd

文件处理器之——awk

printf 函数

# awk -F: '{printf "%-15s %-10s %-15s\n", $1,$2,$3}' /etc/passwd
# awk -F: '{printf "|%-15s| %-10s| %-15s|\n", $1,$2,$3}' /etc/passwd

%s 字符类型

%d 数值类型

占 15 字符

- 表示左对齐,默认是右对齐

printf 默认不会在行尾自动换行,加\n

文件处理器之——awk

===========================

六、awk模式

1、正则表达式

匹配记录(整行):

# awk '/^alice/' /etc/passwd
# awk '$0 ~ /^alice/' /etc/passwd
# awk '!/alice/' passwd
# awk '$0 !~ /^alice/' /etc/passwd

匹配字段:匹配操作符(~     !~)

# awk -F: '$1 ~ /^alice/' /etc/passwd
# awk -F: '$NF !~ /bash$/' /etc/passwd

文件处理器之——awk

2、比较表达式:

比较表达式采用对文本进行比较,只有当条件为真,才执行指定的动作。比较表达式使用关系运算符,

用于比较数字与字符串。


关系运算符

运算符 含义 示例

< 小于 x= 大于等于 x>=y
> 大于 x>y
# awk -F: '$3 == 0' /etc/passwd
# awk -F: '$3 < 10' /etc/passwd
# awk -F: '$7 == "/bin/bash"' /etc/passwd
# awk -F: '$1 == "alice"' /etc/passwd
# awk -F: '$1 ~ /alice/ ' /etc/passwd
# awk -F: '$1 !~ /alice/ ' /etc/passwd
# df -P | grep '/' |awk '$4 > 25000'

文件处理器之——awk

3、条件表达式:

# awk -F: '$3>300 {print $0}' /etc/passwd
# awk -F: '{ if($3>300) print $0 }' /etc/passwd
# awk -F: '{ if($3>300) {print $0} }' /etc/passwd
# awk -F: '{ if($3>300) {print $3} else{print $1} }' /etc/passwd

文件处理器之——awk

4、算术运算:+ - * / %(模) ^(幂 2^3)

可以在模式中执行计算,awk 都将按浮点数方式执行算术运算

# awk -F: '$3 * 10 > 500' /etc/passwd
# awk -F: '{ if($3*10>500){print $0} }' /etc/passwd

文件处理器之——awk

5、逻辑操作符和复合模式

&& 逻辑与 a&&b
|| 逻辑或 a||b
! 逻辑非 !a
# awk -F: '$1~/root/ && $3<=15' /etc/passwd
# awk -F: '$1~/root/ || $3<=15' /etc/passwd
# awk -F: '!($1~/root/ || $3<=15)' /etc/passwd

文件处理器之——awk

6、范围模式

# awk '/Tom/,/Suzanne/' filename

示例

1、统计系统给用户数

文件处理器之——awk

2、统计用户名为4个字符的用户

文件处理器之——awk

3、自定义变量。查询root用户

文件处理器之——awk

4、获得网卡IP(出ipv6以外的所有IP)

文件处理器之——awk


相关内容

热门资讯

国乒男团3比0韩国,晋级世乒赛... 北京时间5月8日,2026伦敦世乒赛男团1/4决赛,国乒男团以总比分3比0战胜韩国队,晋级半决赛。本...
美国公布首批UFO相关政府文件... 美国国防部5月8日公布了首批“与外星人、地外生命、不明空中现象(UAP)以及不明飞行物(UFO)相关...
外交部:日本军国主义侵略罪行罄... 在东京审判开庭80周年之际,《远东国际军事法庭庭审记录·全译本》日前在中国首发。外交部发言人林剑5月...
“一顿海鲜餐被收1800元”游... 5月4日晚,一湖南游客在海南三亚海棠区椰某韵餐饮店吃海鲜餐时,两份海鲜菜品及酒水饮料等被收了1800...
28国组建“矿产北约”围堵中国... 美国拉起军事、安全之外的“新北约”——被称作“矿产版北约”,目标明确:构建排他性战略资源供应体系,刻...
这场圆桌对接会直击新能源车自燃... 5月7日,挪车机器人应用场景供需对接会在成都市民营经济发展促进中心举行。会议聚焦电动汽车自燃处置难题...
驻村工作队倾情帮扶,无人机、无... 极目新闻记者 吴昌华 4月29日,大别山脚下的青云村,一架四旋翼无人机悬停在村委会小院上空,一辆颜色...
从爆炸厂区到58公里外城区,浏... 2026年5月4日16时43分,湖南浏阳华盛烟花制造燃放有限公司生产车间发生爆炸。截至5月8日12时...
加满一箱油多花12.5元!今晚... 【大河财立方消息】 5月8日24时国内成品油调价窗口将开启。据国家发展改革委,4月21日国内成品油价...
“算力券”直达快享 崇川AI产... 转自:扬子晚报 在人工智能浪潮奔涌的当下,算力已成为驱动产业创新的重要生产力,更是AI企业技术研发...