linux awk数据脱敏,41.每日一个Linux命令 ----awk

描述:强大的文本分析工具,按行处理。

用法:awk '/search pattern1/ {Actions}

/search pattern2/ {Actions}' file

1.search pattern正则表达式 布尔值

2.Actions 输出的语法

3.单引号的作用防止shell截断

工作方式:

1) Awk 一次读取文件中的一行

2)对于一行,按照给定的正则表达式的顺序进行匹配,如果匹配则执行对应的 Action

3)如果没有匹配上则不执行任何动作

4)在上诉的语法中,Search Pattern 和 Action 是可选的,但是必须提供其中一个

5)如果 Search Pattern 未提供,则对所有的输入行执行 Action 操作

6)如果 Action 未提供,则默认打印出该行的数据

7) {} 这种 Action 不做任何事情,和未提供的 Action 的工作方式不一样

8) Action 中的语句应该使用分号分隔

内建变量

变量

描述

\$n

当前记录的第n个字段,字段间由FS分隔

\$0

完整的输入记录

ARGC

命令行参数的数目

ARGIND

命令行中当前文件的位置(从0开始算)

ARGV

包含命令行参数的数组

CONVFMT

数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组

ERRNO

最后一个系统错误的描述

FIELDWIDTHS

字段宽度列表(用空格键分隔)

FILENAME

当前文件名

FNR

同NR,但相对于当前文件

FS

字段分隔符(默认是任何空格)

IGNORECASE

如果为真,则进行忽略大小写的匹配

NF

当前记录中的字段数

NR

当前记录数

OFMT

数字的输出格式(默认值是%.6g)

OFS

输出字段分隔符(默认值是一个空格)

ORS

输出记录分隔符(默认值是一个换行符)

RLENGTH

由match函数所匹配的字符串的长度

RS

记录分隔符(默认是一个换行符)

RSTART

由match函数所匹配的字符串的第一个位置

SUBSEP

数组下标分隔符(默认值是/034)

示例:

[root@share19 ~]# cat employee.txt

100 Thomas Manager Sales $5,000

200 Jason Developer Technology $5,500

300 Sanjay Sysadmin Technology $7,000

400 Nisha Manager Marketing $9,500

500 Randy DBA Technology $6,000

awk 默认

[root@share19 ~]# awk '{print}' employee.txt

100 Thomas Manager Sales $5,000

200 Jason Developer Technology $5,500

300 Sanjay Sysadmin Technology $7,000

400 Nisha Manager Marketing $9,500

500 Randy DBA Technology $6,000

awk 打印匹配的行

[root@share19 ~]# awk '/Thomas/

> /Nisha/' employee.txt

100 Thomas Manager Sales $5,000

400 Nisha Manager Marketing $9,500

打印指定域

[root@share19 ~]# awk '{print $2,$5}' employee.txt

Thomas $5,000

Jason $5,500

Sanjay $7,000

Nisha $9,500

Randy $6,00

[root@share19 ~]# awk '{print $2,$NF}' employee.txt

Thomas $5,000

Jason $5,500

Sanjay $7,000

Nisha $9,500

Randy $6,000

awk 开始结束动作

BEGIN { Actions}

{ACTION} # Action for everyline in a file

END { Actions }

[root@share19 ~]# awk 'BEGIN {print "NAME/tDesignation/tDepartment/tSalary"}

{print $2,"\t",$3,"\t",$4,"\t",$NF}

END {print "Report Generated\n--------------------"}' employee.txt

NAME/tDesignation/tDepartment/tSalary

Thomas Manager Sales $5,000

Jason Developer Technology $5,500

Sanjay Sysadmin Technology $7,000

Nisha Manager Marketing $9,500

Randy DBA Technology $6,000

Report Generated

--------------------

找出ID>200的员工

[root@share19 ~]# awk '$1>200' employee.txt

300 Sanjay Sysadmin Technology $7,000

400 Nisha Manager Marketing $9,500

500 Randy DBA Technology $6,000

打印技术部员工

[root@share19 ~]# awk '$4 ~ /Technology/' employee.txt

200 Jason Developer Technology $5,500

300 Sanjay Sysadmin Technology $7,000

500 Randy DBA Technology $6,000

打印技术部的员工数

[root@share19 ~]# awk 'BEGIN {count = 0}

> $4 ~ /Technology/ {count = count +1}

> END {print "Number of employee in Technology Dept",count}' employee.txt

Number of employee in Technology Dept 3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值