21 - awk基础语法

awk概述

  • aws编程语言/数据处理引擎
    • 创造者:Aho, Weinberger, Kernighan
    • 基于模式匹配检查输入文本,逐行处理并输出
    • 通常用在shell脚本中,获取指定的数据
    • 单独用时,可对文本数据做统计
  • 语法格式
    • 格式1:前置命令 | awk [选项] '[条件]{指令}'
    • 格式2:awk [选项] '[条件]{指令}' 文件...
cat test.txt
hello the world
welcom to beijing

awk '{print $1,$3}' test.txt
hello world
welcom beijing

awk '{print $1}' test.txt
hello
welcom

 awk '{print $1,$2}' test.txt
hello the
welcom to
  • 常用选项:-F可以指定分隔符,默认分隔符为(空白或Tab键)
awk -F: '{print $1,$2}' /etc/passwd
root x
bin x
daemon x

awk内置变量

  • 内置变量都有特殊含义,可直接使用
变量 说明
FS 保存或设置字段分隔符,例如FS=":",与-F功能一样
$n 指定分隔的第n个字段,如3分别表示第1、3列
$0 当前读入的整行文本内容
NF 记录当前处理行的字段个数(列数)
NR 记录当前已读入行的数量(行数)
awk -F: '{print NF}' /etc/passwd
7
7
...

 awk '{print NF}' test.txt
3
3
0

awk -F: '{print NR,NF}' /etc/passwd
1 7
2 7
3 7
4 7
5 7
6 7
7 7
8 7
···

awk -F: '{print "用户名:",$1,"解释器:", $7}' /etc/passwd
用户名: root 解释器: /bin/bash
用户名: bin 解释器: /sbin/nologin
用户名: daemon 解释器: /sbin/nologin
用户名: adm 解释器: /sbin/nologin

awk过滤的时机

  • 在所有行前处理,BEGIN{}
    • 读入第一行文本之前执行
    • 一般用来初始化操作
  • 逐行处理,{}
    • 逐行读入文本执行相应的处理
    • 是最常见的编辑指令块
  • 在所有行后处理,END{}
    • 处理完最后一行文本之后执行
    • 一般用来输出处理结果
  • 可以单独使用,也可以同时一起使用
 awk 'BEGIN {a=34;print a+12}'
46

awk 'BEGIN{x=0}/\

小结

  • 基本语法
    • 格式1:前置命令 | awk [选项] '[条件]{指令}'
    • 格式2:awk [选项] '[条件]{指令}' 文件...
  • 过滤时机
    • awk 'BEGIN{} [条件]{} END{}' 文件...

你可能感兴趣的:(21 - awk基础语法)