文本三剑客------awk 文本处理语言

本文详细介绍了awk文本处理语言,包括其基本用法、工作原理、print和printf格式、变量、控制语句、数组、函数等方面。awk通过模式匹配和处理,适合对文本进行抽取、格式化输出和分析。文章通过实例展示了awk在处理文件、统计、条件判断等方面的强大功能,是学习awk的实用指南。
摘要由CSDN通过智能技术生成

一.awk简介

awk文本处理语言,适合对文本进行抽取处理;sed:非交互式的编辑器,适合对文本进行编辑

awk:报告生成器,格式化文本输出
版本:New awk(nawk),GNU awk( gawk) gawk:模式扫描和处理语言
基本用法:
awk [options] ‘program’ var=value file…
awk [options] -f programfile var=value file…

awk [options] 'BEGIN{action;… }pattern{action;… }END{action;… }' file ...

awk 程序可由:BEGIN语句块、能够使用pattern模式匹配的通用语句块、END语句块,共3部分组成

program (程序)通常是被放在单引号中
选项:
-F “分隔符” 指明输入时用到的字段分隔符(默认为空格)(同时支持多个分隔符连用)
-v var=value 变量赋值
-f 文件单引号之间的内容可以写到文件里面
在这里插入图片描述
基本格式:awk [options] ‘program’ file…
中间这个program必须放在单引号之间

Programpattern{action statements;..}

pattern和action
• pattern部分决定动作语句何时触发及触发事件
BEGIN,END
• action statements对数据进行处理,放在{}内指明
print打印(echo), printf(支持格式化-对齐)

分割符、域和记录

• awk执行时,由分隔符分隔的字段(域)标记$1,$2...$n称为域标识。 自动标识

$0为所有域(整行),注意:此时和shell中变量$符含义不同(此时的$n表示列/域)

• 文件的每一行称为记录
• 省略action,则默认执行 print $0 的操作

二. awk工作原理

第一步:执行BEGIN{action;… }语句块中的语句
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{action;…}语句块

BEGIN:语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中

END:语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块
pattern:语句块中的通用命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块

三. print格式

输出的每一行之后都换行

print item1, item2, …
重点:
(1) 逗号分隔符
(2) 输出item可以是字符串,也可是数值;当前记录的字段、变量或awk的表达式
(3) 如省略item,相当于print $0
(4)item之间可以加特殊符(但必须用双引号)

如果pattern不写所有的行都符合条件
** 多个空白 只当做一个**
没有跟文件—根据标准输入处理
不加双引号 ,就会把字符当成变量
支持算术运算
替换bc命令 awk 'BEGIN{print 算式}'

主要语法:

awk [options] 'BEGIN{action;… }pattern{action;… }END{action;… }' file ...

示例:
-F: 指定:为分隔符

awk ‘{print “hello,awk”}’ 对标准输入进行处理
awk –F: ‘{print}’ /etc/passwd 相当于cat
awk –F: ‘{print “wang”}’ /etc/passwd将每行都变成wang
awk –F: ‘{print $1}’ /etc/passwd对第一个域(列)处理(默认空格为分隔符
awk –F: ‘{print $0}’ /etc/passwd相当于cat
awk –F: ‘{print $1”\t”$3}’ /etc/passwd给中间加一个制表符
grep “^UUID”/etc/fstab | awk ‘{print $2,$4}’打印2,4列内容

首先打印2,4列,然后在最前面打印begin,在最后面打印end

grep "^UUID" /etc/fstab |awk 'BEGIN{print "Begin"}{print $2,$4}END{print "End"}'

在这里插入图片描述
打印分区使用率
在这里插入图片描述
统计ip次数前三名
在这里插入图片描述
加表头
在这里插入图片描述

四. awk变量

变量:内置和自定义变量

变量使用前得加-v

1.内置变量

FS输入字段分隔符默认为空白字符

awk -v FS=’:’ '{print $1,FS,$3}’ /etc/passwd
这里最后将FS变量将$1和$3分隔(优势,比-F好用,可以提前定义变量,然后用FS引用变量)
awk –F: '{print $1,$3,$7}’ /etc/passwd

在这里插入图片描述
在这里插入图片描述

-F支持多个分隔符 用 | 表示或
这里-F " +|%" 表示多个空格或者%作为分隔符
在这里插入图片描述
取时间在这里插入图片描述

旁边两个盘[]之间的表示 \或者 空格

在这里插入图片描述

OFS输出字段分隔符,默认为空白字符
awk -v FS=‘:’ -v OFS=‘:’ '{print $1,$3,$7}’ /etc/passwd
在这里插入图片描述

RS输入记录分隔符,指定输入时的换行符\n
也就是指定行的换行符
awk -v RS=’ ’ ‘{print }’ /etc/passwd把空格作为换行符

为字段分隔符,以作为行分隔符
在这里插入图片描述

ORS输出记录分隔符,输出时用指定符号代替换行符
awk -v RS=’ ’ -v ORS=’###’‘{print }’ /etc/passwd指定###为输出换行符

NF字段数量
awk -F:‘{print NF}’ /etc/fstab 打印列数量(引用变量不加$)
awk -F:‘{print $(NF-1)}’ /etc/passwd (表示倒数第二个字段)

打印倒数第一个字段
在这里插入图片描述
查看远程主机的ip
空白或:作为分隔符
在这里插入图片描述

NR记录号也就是(行号)默认为 —回车换行
awk ‘{print NR}’ /etc/fstab ;awk END‘{print NR}’ /etc/fstab
在这里插入图片描述
FNR:各文件分别计数,记录号(对多个文件)
awk ‘{print FNR}’ /etc/fstab /etc/inittab
在这里插入图片描述

在这里插入图片描述

FILENAME当前文件名
awk '{print FILENAME}’ /etc/fstab

ARGC命令行参数的个数
awk '{print ARGC}’ /etc/fstab /etc/inittab
awk ‘BEGIN {print ARGC}’ /etc/fstab /etc/inittab
ARGV数组,保存的是命令行所给定的各参数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值