awk

文本处理 awk
一 awk简介:
awk是一种编程语言,用于在linux或者unix系统下对文本或者数据进行处理, 数据可以来自标准输入,一个或者多个
文件,或者其他命令输出,他支持用户自定义函数和动态正则表达式功能,是linux和unix下强大的编程工具,可以在命
令中使用但是更多的是作为脚本来使用
awk处理文本和数据的方式是这样的,它逐行扫描文件,送第一行到最后一行,寻找匹配特定模式的行,并在这些行上面
进行你想要的操作,如果没有指定处理动作,则把匹配的行显示在标准输出(屏幕),如果没有指定模式,则操作所有行,
awk分别代表作者姓氏的地一个字母,gawk是awk的GNU版本,他提供了Bell实验室和GNU的一些扩展

二 awk的两种形式的语法格式
awk [options] ‘commands’ filenames
awk [options] -f ‘awk-script-file’ filenames默认为换行符号回车

==options
-F 定义输入字段分割符号,默认的分割符是空格或者制表符(tab)
==commands
BEGIN{} 行处理前
{} 行处理中
END{} 行处理后
awk ‘BEGIN{FS=":";OFS=":"} {print $1,$2} END{print “------------”}’ /etc/passwd

==awk命令格式
1 awk ‘/pattern/’ filename 
示例: awk ‘/^root/’ /etc/passwd

2 awk ‘{action}’ fiename 
示例: awk -F: ‘{print $1}’ /etc/passwd

3 awk ‘/pattern/ {action}’ filename 
示例: awk ‘/^r…t/ {print $1}’ /etc/passwd
awk ‘BEGIN{FS=":"}/^root/ {print $1,$2}’ /etc/passwd
4 command | awk ‘/pattern/ {action}’ 
示例: cat /etc/passwd | awk ‘/^root/ {print $1}’

===记录与字段相关的内部变量
$0 保存当前记录的内容,整行内容

NR 全部记录的行号, 多个输入文件记录的行号相加
FNR 当前记录的行号,仅为当前文件而非全部输入的文件
NF 当前记录的字段个数
FS 输入字段分割符,默认为空格
OFS 输出字段分割符,默认为空格
RS 输入记录分割符号(默认为换行符号回车)
ORS 输出记录分割符号(默认为换行符号回车)

CONVFMT 用于数字的字符串转换格式(默认格式 %.6g)
ENVIRON 环境变量的关联数组

OFMT 数字的输出格式(默认为%.6g)

ARGC 命令行中的参数个数
ARGV 包含命令行参数的数组

awk格式话输出

print函数

date | awk ‘{print "Month: "KaTeX parse error: Undefined control sequence: \nYear at position 4: 2 "\̲n̲Y̲e̲a̲r̲: "NF}’

awk -F: ‘{print “username:”$1"\tuid is:"$3}’ /etc/passwd

awk -F: ‘{print “\tusername and uid:” $1,$3 “!”}’ /etc/passwd

printf函数

%s 字符类型

%d 数值类型

%f 浮点类型

-15s 代表 占用15个字符, -代表左对齐, 默认是右面对齐,printf默认不会在尾部加\n

awk -F: ‘{printf “%-15s %-10s %-15s\n”,$1,$2,$3}’ passwd

awk -F: ‘{printf “|%-15s|%-10s|%-15s|\n”,$1,$2,$3}’ passwd

awk的模式和动作

任何awk语句都是由模式和动作组成,模式部分决定动作语句何时触发及触发语句,处理即对数据进行的操作,如果省略模式部分,动作将时刻保持执行状态.模式可以是任何条件语句或复合语句或者正则表达式,模式包括两个特殊字段BEGIN和END.使用BEGIN语句设置计数和打印头,BEGIN语句可以使用在任何文本动作之前,之后文本浏览动作依据输入文本开始执行,END语句用来在awk完成文本浏览之后打印输出文本总数和结尾状态.

awk模式:

====正则表达式

1 匹配记录整行内容

awk ‘/alice/{print $0}’ /etc/passwd

awk ‘$0 ~ /alice/’ /etc/passwd

awk ‘!/alice/’ /etc/passwd

awk ‘$0 !~ /alice/’ /etc/passwd

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

awk ‘$1 ~ /root/’ /etc/passwd

awk ‘$NF ~ //bin/bash/’ /etc/passwd

awk ‘ N F !   / b a s h NF !~ /bash NF! /bash/’ /etc/passwd

awk ‘$NF ~ //bin/bash/’ /etc/passwd

====比较表达式

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

关系运算符号

运算符号

含义

示例

<

大于

x<y

<=

小于等于

x<=y

==

等于

x==y

!=

不等于

x!=y

=

大于等于

x>=y

大于

x>y

举例子:

awk -F: ‘$3 > 0 {print $0}’ passwd

awk ‘$3 == 0 {print $0}’ passwd

awk -F: ‘$NF == “/bin/bash” {print $0}’ /etc/passwd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值