小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
awk
gawk (gnu awk)
Unix中awk的GNU版本,完成grep和sed的工作
支持数学运算,流程该控制内置大量的变量和函数
awk命令工作原理
与sed一样, 均是一行一行的读取、处理
sed作用于一整行的处理, 而awk将一行分成数个字段来处理
awk的用-F来指定分隔符
默认的字段分隔符是任意空白字符(空格或者TAB)
awk的数据字段变量
$0表示整行文本
$1表示文本中第一个数据字段
$2表示文本中第二个数据字段
$n表示文本中第n个数据字段
awk命令的执行过程
awk 命令的完整语法 :
awk 'BEGIN{commands} pattern{commands} END{commands}' file1
- 执行BEGIN{commands}语句块中的语句
- 从文件或stdin中读取第1行,
- 有无模式匹配, 若无则执行{}中的语句,
- 若有则检查该整行与pattern是否匹配, 若匹配, 则执行{}中的语句,
- 若不匹配则不执行{}中的语句,接着读取下一行
- 重复这个过程, 直到所有行被读取完毕
- 执行END{commands}语句块中的语句
awk命令的基本语法
awk -F 分隔符 '/模式{动作}' 输入文件
awk的指令一定要用单引号括起来awk的动作一定要用花括号括起来- 模式可以是正则表达式、条件表达式或两种组合
- 如果模式是正则表达式要用
/定界符 - 多个动作之间用
;分开
awk命令的操作符
- 正则表达式和bash一致
- 数学运算:+,-,*,/, %,++,- -
- 逻辑关系符:&&, ||, !
- 比较操作符:>,<,>=,!=,<=,== ~ !~
- 文本数据表达式:== (精确匹配)
- ~波浪号表示匹配后面的模式
- 要想某个字段进行模式匹配,就需要使用~符号
使用格式:字段 ~ /模式/ 【demo】:
who | awk '$2 ~ /pts/{print $1}‘
awk -F: '$3 ~ /\<...\>/ {print $1,$3}' /etc/passwd
seq 100 | awk '$1 % 5 == 0 || $1 ~ /^1/{print $1}'
awk -F: '$1 == "root"{print $1,$3}' /etc/passwd