Shell - awk 原理和使用
awk 原理
- awk 的工作原理是按行读取数据,寻找符合匹配模式的数据,进行对应的操作
- awk 基本结构包括模式匹配(用于找到要处理的行)和处理过程(即处理动作)
- awk有两个特殊的模式:BEGIN和END,他们被放置在没有读取任何数据之前以及在所有数据读取完成以后执行。
提示:awk读取文件内容的每一行时,将对比改行是否与给定的模式相匹配,如果匹配则执行处理过程,否则对该行不做任何处理。
如果没有指定处理脚本,则把匹配的行显示到标准输出,即默认处理动作是print打印行;
如果没有指定模式匹配,则默认匹配所有数据。
命令结构:
awk [选项参数] 'BEGIN{ commands } pattern{ commands } END{ commands }'
选项参数:
-F: 指定每一行内的分隔符,默认按照空格切割; 如:-F , 用 , 分割; 多个分割方式:BEGIN{FS="[:, ]"}
-v:定义变量 通常在 BEGIN 中定义; 没有定义的变量初始为0或者空字符串
-f: 读取awk脚本文件用于执行
内置变量:
变量名 | 变量说明 |
---|---|
ARGC | 命令行参数个数 |
FILENAME | 当前输入文档的名称 |
FNR | 当前输入文档的当前记录编号,尤其当有多个输入文档时有用 |
NR | 输入流的当前记录编号 |
NF | 当前记录的字段个数 |
FS | 字段分隔符 |
OFS | 输出字段分隔符,默认为空格 |
ORS | 输出记录分隔符,默认为换行符\n |
RS | 输入记录分隔符,默认为换行符\n |
$n | 当前记录的第n个字段,字段间由FS分隔 |
$0 | 完整的输入记录 |
匹配:
log.txt:
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
字符串匹配
~ 表示模式开始。// 中是模式。
# 输出第二列包含 "th",并打印第二列与第四列
$ awk '$2 ~ /th/ {print $2,$4}' log.txt
----------------result--------------------
this a
模式取反
$ awk '$2 !~ /th/ {print $2,$4}' log.txt
----------------result--------------------
Are like
a
There orange,apple,mongo
$ awk '!/th/ {print $2,$4}' log.txt
----------------result--------------------
Are like
a
There orange,apple,mongo
https://blog.51cto.com/manual/932958