41.每日一个Linux命令 ----awk
2016-08-05 16:00
459 查看
描述:强大的文本分析工具,按行处理。
用法: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 中的语句应该使用分号分隔
内建变量
示例:
awk 默认
awk 打印匹配的行
打印指定域
awk 开始结束动作
找出ID>200的员工
打印技术部员工
打印技术部的员工数
用法: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
相关文章推荐
- 每天一个linux命令(41):ps命令
- 每天一个linux命令(41):ps命令
- 24.每日一个Linux命令----write
- 31.每日一个Linux命令----wc
- 28.每日一个Linux命令----chage
- 每天一个linux命令(41):ln 命令
- 每天一个linux命令(41):ps命令
- 25.每日一个Linux命令----wall
- 一天一个shell命令 linux文本内容操作系列-awk命令详解
- 30.每日一个Linux命令----hwclock
- 每天一个linux命令(41):ps命令
- 每天一个linux命令(41):at命令
- 每天一个Linux命令-17(awk)
- 26.每日一个Linux命令----last
- 每天一个linux命令(41):ps命令
- 【转】每天一个linux命令(41):ps命令
- 每天一个linux命令(41):ps命令
- 每日一个Linux命令 pwd
- 每天一个linux命令(41):route命令
- 27.每日一个Linux命令----lastlog