Shell工具

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。与cut类似,但功能更加强大。

1.基本用法

awk [选项参数] ‘pattern1{action1}  pattern2{action2}...’ filename

  pattern:表示AWK在数据中查找的内容,就是匹配模式
  action:在找到匹配内容时所执行的一系列命令

2.选项参数说明

选项参数 功能
-F 指定输入文件分隔符
-v 赋值一个用户定义变量

3.案例实操

数据准备
[root@VM_0_8_centos data]# cp /etc/passwd ./

案例1:搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。(列之间以:分隔)

[root@VM_0_8_centos data]# awk -F : '/^root/ {print $7}' passwd 
/bin/bash

案例2:搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”号分割。

[root@VM_0_8_centos data]# awk -F : '/^root/ {print $1","$7}' passwd 
root,/bin/bash

案例3:只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"dahaige,/bin/buyaolian"

  BEGIN和END相当于正则。

  对于{print $1","$7}来说,没有pattern,那就是对所有行执行action。

[root@VM_0_8_centos data]# awk -F : 'BEGIN{print "user,shell"} {print $1","$7} END{print "dahaige,/bin/buyaolian"}' passwd 
user,shell
root,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
...省略...
chrony,/sbin/nologin
tcpdump,/sbin/nologin
syslog,/bin/false
dahaige,/bin/buyaolian

案例4:将passwd文件中的用户id增加数值1并输出

[root@VM_0_8_centos data]# awk -F : -v i=1 '{print $3+i}' passwd 
1
2
3
4
...省略...
73
997
1001

案例4:查看3个内置变量

FILENAME:文件名

NR:行号

NF:切割后列的个数

[root@VM_0_8_centos data]# awk -F : '{print FILENAME "," NR "," NF}' passwd 
passwd,1,7
passwd,2,7
passwd,3,7
passwd,4,7
...省略...
passwd,23,7
passwd,24,7
passwd,25,7
passwd,26,7

案例5:查看空行所在的行号

awk '/^$/ {print NR}' sed.txt
原文地址:https://www.cnblogs.com/noyouth/p/12767848.html