(转)awk实例练习(一)

文章转自 http://www.cnblogs.com/zhuyp1015/archive/2012/07/14/2591822.html

前一篇学习了awk的基本知识,现在来做一些练习加深一下印象。

假设我们有这样一个待处理的文件"grade.txt":

M.Tansley     05/99     48311     Green     8     40     44

J.Lulu     06/99     48317     green     9     24     26
P.Bunny     02/99     48     Yellow     12     35     28
J.Troll     07/99     4842     Brown-3     12     26     26
L.Tansley     05/99     4712     Brown-2     12     30     28

#打印整个文件

$ awk ‘{print $0}‘ grade.txt

M.Tansley       05/99   48311   Green   8       40      44

J.Lulu          06/99   48317   green   9       24      26

P.Bunny         02/99   48      Yellow  12      35      28

J.Troll         07/99   4842    Brown-3 12      26      26

L.Tansley       05/99   4712    Brown-2 12      30      28

#打印第一和第四个域

$ awk ‘{print $1,$4}‘ grade.txt

M.Tansley Green

J.Lulu green

P.Bunny Yellow

J.Troll Brown-3

L.Tansley Brown-2

#打印表头

$ awk ‘BEGIN {print "Name            Belt\n---------------------------"}

> {print $1"\t"$4}‘ grade.txt

Name            Belt

---------------------------

M.Tansley       Green

J.Lulu  green

P.Bunny Yellow

J.Troll Brown-3

L.Tansley       Brown-2

正则表达式相关

为使一域号匹配正则表达式,使用符号‘~’后紧跟正则表达式,也可以用 i f语句。awk中if后面的条件用()括起来。

#下面代码打印$4 包含 Brown 的行

$ awk ‘$4~/Brown/ {print $0}‘ grade.txt

J.Troll         07/99   4842    Brown-3 12      26      26

L.Tansley       05/99   4712    Brown-2 12      30      28

#非精确匹配

$ awk ‘$3 ~/48/ {print $0}‘ grade.txt

M.Tansley       05/99   48311   Green   8       40      44

J.Lulu          06/99   48317   green   9       24      26

P.Bunny         02/99   48      Yellow  12      35      28

J.Troll         07/99   4842    Brown-3 12      26      26

#精确匹配

$ awk ‘$3=="48" {print $0}‘ grade.txt

P.Bunny         02/99   48      Yellow  12      35      28

 

#不匹配 使用 ‘!~’

$ awk ‘$0 !~ /Brown/‘ grade.txt

M.Tansley       05/99   48311   Green   8       40      44

J.Lulu          06/99   48317   green   9       24      26

P.Bunny         02/99   48      Yellow  12      35      28

$ awk ‘$4 != "Brown-2" {print $0}‘ grade.txt

M.Tansley       05/99   48311   Green   8       40      44

J.Lulu          06/99   48317   green   9       24      26

P.Bunny         02/99   48      Yellow  12      35      28

J.Troll         07/99   4842    Brown-3 12      26      26

#小于

$ awk ‘$6 < $7 {print $0 "$1 Try better at the next comp"}‘ grade.txt

M.Tansley       05/99   48311   Green   8       40      44$1 Try better at the next comp

J.Lulu          06/99   48317   green   9       24      26$1 Try better at the next comp

#设置大小写

$ awk ‘/[Gg]reen/‘ grade.txt

M.Tansley       05/99   48311   Green   8       40      44

J.Lulu          06/99   48317   green   9       24      26

#匹配第一个域的第四个字符是‘a’

$ awk ‘$1 ~/^...a/‘ grade.txt

M.Tansley       05/99   48311   Green   8       40      44

L.Tansley       05/99   4712    Brown-2 12      30      28

#‘或‘匹配,使用 ‘|’ ,需使用括号括起来

$ awk ‘$0 ~/(Yellow|Brown)/‘ grade.txt

P.Bunny         02/99   48      Yellow  12      35      28

J.Troll         07/99   4842    Brown-3 12      26      26

L.Tansley       05/99   4712    Brown-2 12      30      28

时间: 2024-11-05 03:06:28

(转)awk实例练习(一)的相关文章

Awk 实例

AWK 是一种用于处理文本的编程语言工具.AWK 在很多方面类似于 shell 编程语言,尽管 AWK 具有完全属于其本身的语法.它的设计思想来源于 SNOBOL4 .sed .Marc Rochkind设计的有效性语言.语言工具 yacc 和 lex ,当然还从 C 语言中获取了一些优秀的思想.在最初创造 AWK 时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令.该实用工具扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式.如果发现匹配内容,则

(转)awk实例练习(二)

文章转自 http://www.cnblogs.com/zhuyp1015/archive/2012/07/14/2591842.html 先来总结一下awk内置变量: ARGC          命令行参数个数 ARGV          命令行参数排列 ENVIRON       支持队列中系统环境变量的使用 FILENAME      awk浏览文件名 FNR           浏览文件的记录数 FS            设置输入域分隔符,等价于命令行-F选项 NF          

awk 实例练习

假设我们有这样一个待处理的文件"grade.txt": M.Tansley     05/99     48311     Green     8     40     44 J.Lulu     06/99     48317     green     9     24     26P.Bunny     02/99     48     Yellow     12     35     28J.Troll     07/99     4842     Brown-3     12

awk实例(持续更新)

1.显示第几列到第几列. 显示第3至第5列 awk '{for(i=3;i<=5;i++) printf $i""FS;print ""}' file 显示第3列至最后一列 awk '{for(i=3;i<=NF;i++) printf $i""FS;print ""}' file 扩展: find . -mtime 0 -name "*.php" -exec ls -lih {} \; |aw

awk实例

1.时间段匹配 [[email protected] ~]# cat c 10:01 10:02 10:03 10:05 10:06 10:07 12:01 11:01 [[email protected] ~]# awk '$1>="10:05" && $1<="11:10"' c 10:05 10:06 10:07 11:01 awk的时间匹配是不受时间顺序的影响 [[email protected] ~]# awk '/10:05/

sed和awk的用法以及区别

sed主要处理"行问题". awk主要处理"列问题". sed实例:sed -n "2p" /file 输出file文件中的第二行 awk实例:awk -F= 'BEGIN{print "hello"}{print $2}END{print "bye"}' /file 以"="为分块符,输出第一行为"hello",中间输出为file的所有行的第二列,最后输出 &quo

awk系列:在awk中如何使用流程控制语句

导读 当你回顾所有到目前为止我们已经覆盖的 awk 实例,从 awk 系列的开始,你会注意到各种实例的所有指令是顺序执行的,即一个接一个地执行.但在某些情况下,我们可能希望基于一些条件进行文本过滤操作,即流程控制语句允许的那些语句. 在 awk 编程中有各种各样的流程控制语句,其中包括: if-else 语句 for 语句 while 语句 do-while 语句 break 语句 continue 语句 next 语句 nextfile 语句 exit 语句 然而,对于本系列的这一部分,我们将

Linux常用命令之awk

标题:awk命令的使用 作用:awk是非常好用的数据处理工具,主要处理每一行的字段内的数据,默认的字段的分割符为空格键或[tab]键 一.awk脚本的基本结构: awk 'BEGIN{print "start"} pattern {commands} END{print "ends"} file // 一个awk脚本通常由:BEGIN语句块.能够使用模式匹配的通用语句块.END语句块3部分组成,这三部分是可选的,任意一部分都可以不出现在脚本中            

使用awk格式化输出文本

注意:本文并不是一篇awk入门文章,而是偏重实例讲解,由于awk是借鉴了c语法,因此awk的许多地方还保留有c语言的痕迹,比如printf语句:for,if的语法结构等 介绍 最简单地说,AWK 是一种用于处理文本的编程语言工具,处理模式是只要在输入数据中有模式匹配,就执行一系列指令.awk命令格式为: awk {pattern + action} {filenames} awk可以读取后接的文件,也可以读取来自前一命令的标准输入,它分别扫描输入数据的每一行,查找命令行中pattern是否匹配.