在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
awk 复制代码 代码如下:zhangsan 1977 male computer 83 lisi 1989 male math 99 wanglijiang 1990 female chinese 78 xuliang 1977 male economic 89 xuxin 1986 female english 99 wangxuebing 1978 male math 89 lichang 1989 male math 99 wanglijiang 1990 female chinese 78 zhangsansan 1977 male computer 83 langxuebing 1978 male math 89 lisibao 1989 male math 99 xiaobao 1990 female chinese 78 一行中的5个字段分辨表示姓名, 出生年, 性别,科目,分数, 是一个很传统很典型的报表文件. Awk基本语法: awk ‘pattern1 {command1;command 2…; command 3}pattern2 { command …}’ pattern表示用来过滤记录的模式, 可是是正则表达式, 关系运算表达式, 也可以什么也没有(表示选中所有记录); 每个pattern选中的行记录会被花括号括起来的命令command操作一遍, command之间用;分割. 花括号里面可以什么也没有, 则默认为print输出整行记录. Comamnd可以是输出, 可以是算术运算, 逻辑运算, 循环控制等等. 先看几个例子, 以建立对awk的命令直观的了解. 复制代码 代码如下:awk ‘/1990/’ s.txt #//直接输出1990年出生的同学; awk ‘/chinese/{print “语文”; print “语文”}’s.txt #// 对chinese的课程的行输出两行”语文 +”; awk ‘20>1{print “Yes”}’ s.txt #//因为20>0,所以每行输出Yes; awk 'BEGIN{print "Result of the quiz:\n"}{print}END{print"---------------------------"}' s.txt 结果: 本例有3个花括号,分别对应3个模式, BEGIN和END是特殊模式,分别作用在记录开始前和记录结束后. 变量: 上面说到command可以是算术运算, 所及运算等, 则既然有运算, 就有常量变量, awk可以自定义变量(不需要提前声明, 但最好在BEGIN里面给它初始化). Awk也维护了一组程序变量:
给一些例子来说明这些变量的用法: 复制代码 代码如下:awk ‘$4==”chinese”{print NR, $1, $4, $5}’ s.txt #//第四个字段科目为chinese的记录编号, 学生姓名, 科目和成绩. awk ‘$2~/1990/{print $1}’ s.txt #//找出1990年出生的学生姓名, ~表示匹配正则表达式 awk ‘$2!~/1990/{print $1}’ s.txt #//找出不是1990年出生的学生姓名, !~表示不匹配正则表达式 awk ‘$2>”1985”{print $1, $2}’ s.txt #//找出大于1985年出生的学生姓名,年龄 awk ‘END{print “total: ” NR ”\n----------------” }’ s.txt awk ‘BEGIN{goodChinese=0; goodMath=0}($4==”chinese”||$5>90){goodChinese++}END{print“”} sed grep 复制代码 代码如下:grep -v "Sort" tab2 显示不包含匹配文本的所有行复制代码 代码如下:grep -n "Sort" tab2 显示匹配行及行号复制代码 代码如下:grep -c "Sort" tab2 只输出匹配行的计数精确匹配: 复制代码 代码如下:grep "01">" tab2 复制代码 代码如下:grep -in "code" tab2 忽略大小写多次过滤 复制代码 代码如下:grep -in "code" tab2 | grep "02" 补充说明,grep 家族还包括fgrep和egrep。fgrep是fix grep, 允许查找字符串而不是一个模式,运算速度快,适合于从大量数据中进行检索;egrep是扩展grep,支持基本及扩展的正则表达式,可用()及|等,但不支持q模式范围的应用及与之相对应的一些更加规范的模式。 复制代码 代码如下:echo aAA123bbb |egrep '[0-9]*' 复制代码 代码如下:echo AAA123bbb | egrep -i '^a'
|
请发表评论