aw语法

回复 收藏
本帖最后由 ocean 于 2014-8-28 11:51 编辑

gawk: unix中的GNU版本,完成grep和sed的工作
支持数学运算,流程该控制内置大量的变量和函数

awk命令工作原理
与sed一样,均是一行一行的读取,处理
sed作用与一整行的处理,而awk将一行分成数个字段来处理

awk的数据字段变量
$0 表示整行文本
$1  表示文本中的第一个数据字段
$n  表示文本中的第n个数据字段

awk的用-F来指定分割符
默认的字段分割符是任意空白字符(空格或TAB)
awk的完整语法
awk  'BEGIN{commands}pattern{commands}END{commands}'  file
awk命令执行的过程
执行BEGIN{commands}语句块中的语句  //处理数据前执行
从文件或stdin中读取第一行,
有无模式匹配,若无则执行{}中的语句,
若有则检查该整行与pattan是否匹配,若匹配,则执行{}中的语句,
若不匹配则不执行{}中的语句,接着读取下一行
重复这个过程,直到所有行被读取完毕
执行END{commands}语句块的语句

awk基本语法
awk  -F 分割符  '/模式/{动作}'  输入文件
awk的 指令一定要用单引号括起
awk 的动作一定要用花括号括起
模式可以是正则表达式。条件表达式或者两种组合
如果模式是正则表达式要用/定界符
多个动作之间用;号风开

实例
awk '/bash/' /etc/passwd
awk -F:  '/^h/{print  $1, $7}'  /etc/passwd
awk -F:  '/^[^h]/{print $1,$7}'  /etc/passwd
awk  -F:  '[:/]'  '{print  $1,$10}'  /etc/passwd
以: 或者以/作为分割符显示第一列和第10列

awk命令的操作符
正则表达式和bash一致
数学运算: +,-,*, /,%,++,--
逻辑关系符:&&,||,!
比较操作符:>,<,>=,<=,!=,==,~,!~
~波浪号表示匹配后面的模式
awk  -F:  '$3 ~ /\<...\>/ {print $1,$3}' /etc/passwd //匹配第三个字段
awk  -F: '$3>=500{print  $1}'  /etc/passwd
awk  -F: '/^h/ && /bash/ {print  $1}'  /etc/passwd
awk  'BEGIN{print "line one\nline two\nline three"}'  //按ctrl+d显示后面三行
awk  'BEGIN{print "start..."}{print  $1}END{print "end..."}' test
awk   'BEGIN{i=0}{i++}END{print  i}'  /etc/passwd  //显示文件的行数

awk命令的内部变量
NF :每行的字段数
NR :当前处理的行号
FS  :当前的分割符,默认是空白字符
OFS :当前的输出分割符,默认空白字符
awk  '{print NF}'  /etc/grub.conf
awk  '{print $1,$NF}'  /etc/grub.conf
awk  '{print  NR,$0}'   /etc/grub.conf
awk -F:  'BEGIN{OFS="---"}{print $1,$7}'  /etc/passwd
awk  'BEGIN{FS=":"}/bash$/{print  NR,$1}END{print  NR}'  /etc/passwd
{:5_121:}
2014-08-28 11:47 举报
已邀请:
0

泡沫。

赞同来自:

支持一个
0

Smile_Am

赞同来自:

感觉好难啊!!
0

jaws1689

赞同来自:

赞一个,感谢分享{:5_135:}

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: