awk的使用方法(一)

awk的工作方式是: 通过给定的参数,去逐行读取文本(或通过管道传递的内容),通过模式判断,再执行对应的动作
awk如何处理每一行的内容: awk每读一行,会将这一行的内容定义为$0, 再通过空格将这一行切割成多个字符串, 按顺序分别定义为$1 $2 $3 $4......以此类推

模板:

awk -options 'pattern { action };' file

例如: 

awk -F ":" '$1=="root" {print $0}' /etc/passwd

解释:
    options -> 参数(可以做一些定义)
    pattern -> 模式(常见的有判断、搜索、和两个特殊模式)
    action  -> 动作(常见的是print,或定义一个变量,或for,while,if等等)


常用解析
1、以“:”作为分隔符,第一列等于root的输出

awk -F ":" '$1=="root" {print $0}' /etc/passwd
#解读
-F ":"        #参数, awk默认为空格,这里根据实际需要选择分隔符为':'; 
$1=="root"    #模式, 类似于if,判断条件是否成立;
{print $0}    #动作,最基本的动作就是print输出内容

2、搜索每一行是否出现“root”

awk -F ":"  '/root/ {print $0}' /etc/passwd
#解读 
/root/    #搜索这一行是否存在'root'这个字符串

3、多个模式+动作

awk -F ":" '$1=="root" {print $1}; $1 == "gdm" {print $1};' /etc/passwd
#多个模式+动作用';'隔开, 不使用';'也行, 就是不太好看
$1=="root" {print $1};    #第一个模式+动作
$1=="gdm" {print $1};     #第二个模式+动作

4、一个动作内包含多个函数

#动作内有两个print函数, 中间用';'隔开,当条件为真,两个命令都执行, 写法与shell无异
awk -F ":" '$1=="root" {print $1; print "我就随便输出点东西吧"};' /etc/passwd

5、一个模式内包含多个条件

#该模式内有两个条件, 用&&关联, 写法与shell无异
awk -F ":"  '/root/ && $2=="x" {print $0}' /etc/passwd

6、无参数或无模式或无动作
 

awk '/root/ {print $1}' /etc/passwd    #不定义切割符
awk -F ":" '{print $1}' /etc/passwd    #不匹配任何参数, 将每一行的第一列全部输出
awk -F ":" '/root/' /etc/passwd        #不执行任何动作, 但是还是将匹配到的行输出

7、特殊模式(BEGIN和END是一种特殊的模式,用于文件读取之前和文件读取之后的操作)

#格式
awk  'BEGIN { action }; pattern { action1 }; END { action }' file
#示例
awk -F ":" 'BEGIN {print "开始"}; $1=="root" {print $0}; END {print "结束"};' /etc/passwd
#在文本操作之前进行初始化设置(我定义了变量s=1)
awk -F ":" 'BEGIN {s=0}; $1 == "tss" && $2 == "x" {print $0; s=s+1};END {print s}' /etc/passwd
#特殊说明一下,下面的命令也能运行:
awk -F  ":" 'END {print NS};BEGIN {print "开始"}; $1 == "root" {print $0};END {print "结束"};END {print NR};BEGIN {print "这TM也行!!!" }' /etc/passwd
awk -F  ":" 'END {print NS}BEGIN {print "开始"}$1 == "root" {for (i=1;i<=NF;i++){print $i}}END {print "结束"}END {print NR}BEGIN {print "这TM也行!!!" }' /etc/passwd


 

下一章讲动作的使用技巧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值