- 浏览: 219469 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
zzhyq:
有没有后台是ASHX 的呀
Ext.tree.TreePanel -
693593336:
谢谢作者分享,正好用上
Ext.tree.TreePanel -
greatwqs:
提供一个下载的demo不是更好
基于servlet的 Freemarker Demo
awk是何方神圣呢?
最简单地说, AWK 是一种用于处理文本的编程语言工具。 AWK 实用工具的语言在很多方面类似于 shell 编程语言,尽管 AWK 具有完全属于其本身的语法。在最初创造 AWK 时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令。该实用工具扫描文件中的每一行(后面的测试中充分的验证了这一点),查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
尽管操作可能会很复杂,但命令的语法始终是:
awk '{pattern + action}' //pattern 即正则表达式
其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号 ({}) 不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。
以“//”开头的,是个人的理解注释。在shell中,注释的标识符是#号。
用到的文件grade的内容如下:
[root@biao LinuxTest]# cat grade
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
[root@biao LinuxTest]# awk 'BEGIN {print "name/n------"}{print $1} END {print "end-of-report"}' grade
name
------
M.Tansley
J.Lulu
P.Bunny
J.Troll
L.Tansley
end-of-report
[root@biao LinuxTest]# awk '$3~/48/ {print $0}' grade
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
[root@biao LinuxTest]# awk '$3=="48" {print $0}' grade
P.Bunny 02/99 48 yellow 12 35 28
[root@biao LinuxTest]# awk ' $4!~/Brown/ {print $0}' grade
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
[root@biao LinuxTest]# awk ' $4!="Brown-2" {print $0}' grade
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
[root@biao LinuxTest]#
p10 //表示的是老师给的PPT的页数。
[root@biao LinuxTest]# awk '/[Gg]reen/' grade
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
[root@biao LinuxTest]# awk '$1 ~/^...a/' grade
M.Tansley 05/99 48311 Green 8 40 44
L.Tansley 05/99 4712 Brown-2 12 30 28
[root@biao LinuxTest]# awk '$1=="P.Bunny" && $4=="yellow" {print $0}' grade
P.Bunny 02/99 48 yellow 12 35 28
[root@biao LinuxTest]# awk '$1=="P.Bunny" || $4=="yellow" {print $0}' grade
P.Bunny 02/99 48 yellow 12 35 28
[root@biao LinuxTest]#
p10
字段分隔符默认是空格,可用-F指定
p11 awk 内置变量
NF 浏览记录的域个数
NR 已读的记录数
p12
[root@biao LinuxTest]# awk 'END {print NR}' grade
5
[root@biao LinuxTest]# awk '{print NF,NR,$0} END {print FILENAME}' grade //打印记录数,列数 该行
7 1 M.Tansley 05/99 48311 Green 8 40 44
7 2 J.Lulu 06/99 48317 green 9 24 26
7 3 P.Bunny 02/99 48 yellow 12 35 28
7 4 J.Troll 07/99 4842 Brown-3 12 26 26
7 5 L.Tansley 05/99 4712 Brown-2 12 30 28
grade
[root@biao LinuxTest]# echo $PWD | awk -F/ '{print $NF}'
LinuxTest
p13 修改域
[root@biao LinuxTest]# awk '{if($1=="M.Tansley") $6=$6-1; print $1,$6,$7}' grade
M.Tansley 39 44
J.Lulu 24 26
P.Bunny 35 28
J.Troll 26 26
L.Tansley 30 28
[root@biao LinuxTest]# awk '{if($1=="M.Tansley") {$6=$6-1; print $1,$6,$7}}' grade
M.Tansley 39 44
[root@biao LinuxTest]#
p14 先打印 Name 制表符 Difference 如果第6列的值小于第7列的值 创建第8列=第7列-第6列 打印第1列和第8列
[root@biao LinuxTest]# awk 'BEGIN { print "Name /t Difference"} {if ($6<$7) {$8=$7-$6;print $1,$8}}' grade
Name Difference
M.Tansley 4
J.Lulu 2
[root@biao LinuxTest]#
p15 /^[^d]/ 匹配不是d开头的行
[root@biao LinuxTest]# awk '(tot+=$6);END {print "club student total points:" tot}' grade
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
club student total points:155
[root@biao LinuxTest]# ls -l |awk '/^[^d]/ {print $8"/t"$5} {tot+=$5} END {print "total KB:"tot}'
16:07 2545
16:04 2230
16:08 527360
15:08 184
15:08 0
total KB:532319
p18 内置的字符串函数
[root@biao LinuxTest]# awk 'BEGIN {print index("Bunny","ny")}' grade
4 //返回后者在前者的第一个位置
[root@biao LinuxTest]# awk '$1=="J.Troll" {print length($1)" " $1}' grade
7 J.Troll //打印$1的长度
[root@biao LinuxTest]# awk 'BEGIN {print match ("ABCD","A")}'
1 //判断前者是否包含后者
[root@biao LinuxTest]#
p19
/b 退格键 /t tab键
/f 走纸换页 /ddd 八进制值
/n 新行 /c任意其他特殊字符,例如//为反斜线符号
/r 回车
awk 'BEGIN {print "/nMay/tday/n/nMay/t/104/141/171"}'
[root@biao LinuxTest]# awk 'BEGIN {print "/nMay/tday/n/nMay/t/104/141/171"}'
May day
May Day
[root@biao LinuxTest]#
p21 输出函数printf
[root@biao LinuxTest]# echo "65" | awk '{printf "%c/n",$0}' //c是ASCii 码
A
[root@biao LinuxTest]# echo "65" | awk '{printf "%f/n",$0}' //f是浮点数
65.000000
[root@biao LinuxTest]# awk '{printf "%-15s %s/n",$1,$3}' grade //-是对齐 s是字符串 不是很理解这语句
M.Tansley 48311
J.Lulu 48317
P.Bunny 48
J.Troll 4842
L.Tansley 4712
p22 将命令写入文件
[root@biao LinuxTest]# cat awkfile
/^Mary/{print "Hello Mary!"} //如果以Mary开头的就打印 Hello Mary 之后再打印1 2 3列;否则,只打印1 2 3列
{print $1,$2,$3}
[root@biao LinuxTest]# awk -f awkfile ep
Tom Jones 4424
Hello Mary!
Mary Adams 5346
Sally Chang 1654
Billy Black 1683
[root@biao LinuxTest]#
p23 脚本文件
[root@biao LinuxTest]# cat grade //查看grade文件内容
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
[root@biao LinuxTest]# cat tot //查看tot文件内容
#!/bin/awk -f
#print a header first
BEGIN{
print "Student Date No. Grade Age Points Max"
print "Name Joined Gained Point Availabe"
print"==========================================================="
}
#let's add the scores of points gained
(tot+=$6)
END{
print "Club student total Points :" tot
print "Average Club student points:" tot/NR
}
[root@biao LinuxTest]# ./tot grade //执行脚本
Student Date No. Grade Age Points Max
Name Joined Gained Point Availabe
===========================================================
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
Club student total Points :155
Average Club student points:31
[root@biao LinuxTest]#
只是单纯对老师课件上的命令的测试,基本上都能理解其意思!现在处于接触阶段,很多东西还需更加系统点的了解。而且生活,学习中,很少用到这些命令的话,迟早会忘光的! 对于awk的所有命令来说,以及其强大的应用,这只是冰山的一角而已。
发表评论
-
[cmd] command for fun
2011-09-02 21:53 720ok begin play ... 1.create fol ... -
正则表达式 grep等命令
2010-03-26 21:17 652很多不同的unix命令都采用一种便捷一致的方法来说明匹配模式, ... -
fedora 12 QQ 的安装使用过程
2010-03-26 23:11 824一 下载地址:http://im.qq.com/qq/linu ... -
linux下软件的基本安装和卸载(转)
2010-03-27 00:09 639Linux软件的安装和卸 ... -
误删gnome桌面上面的面板,怎么恢复?
2010-03-27 09:28 1311发现越来越对fedora感兴趣了。本来想把上面的面板的《通知 ... -
fedora 12 QQ 的安装使用过程(续)
2010-03-27 11:18 898算是把qq for linux 好友显示不全的问题给搞定了。感 ... -
Linux 下rmp命令
2010-03-27 15:10 969RPM 大全 RPM 有五种基本的操作方式(不包括创建软件包 ... -
忘记root密码和第一次登录root的方法步骤
2010-04-01 15:32 688Q:很久很久以前,装了fedora,然后很久很久没有用,然后忘 ... -
忘记root密码和第一次登录root的方法步骤
2010-04-01 15:33 721Q:很久很久以前,装了fedora,然后很 ... -
fedora 12 切换输入法无反应
2010-04-02 16:17 979新安装了fedora 12,需要进行一些设置之后才能使用输入法 ... -
shell一些命令的测试(第六章 引用)
2010-04-03 18:54 932在fedora 12 下,学习还真的是件很郁闷的事情。Lin ... -
正则表达式(小记)
2010-04-03 21:27 728很多东西看的时候,很有感觉,可是不幸的是过些时日便忘的一光二 ... -
shell的一些命令测试(第五章 shell编程初步)
2010-04-06 14:13 940shell 命令的测试示例! 没什么特别的目的性,就熟悉 ...
相关推荐
第4章 文件名置换 31 第5章 shell输入与输出 34 第6章 命令执行顺序 46 第二部分 文本过滤 第7章 正则表达式介绍 49 第8章 grep家族 56 第9章 AWK介绍 66 第10章 sed 用法介绍 89 第11章 合并与分割 104 第12章 tr...
3. **利用命令解释器调用 Awk 程序**:通过在 Awk 程序文件的第一行添加 `#!/bin/awk -f` 来创建可执行脚本,并赋予文件执行权限。 - 示例: ```bash #!/bin/awk -f BEGIN { print "Starting..." } { print $1 ...
awk命令的基本格式是:`awk [选项] '程序' [文件名]`。选项包括 `-F`(指定字段分隔符)、`-v`(设置变量)等。awk有两种语法形式:老式语法和新式(GNU awk,gawk)语法,新式语法提供了更多功能和灵活性。 3. **...
AWK 的基本命令格式如下: ``` awk [选项] '模式或条件 {动作}' 文件名 ``` #### 选项 - `-F` 或 `--field-separator`:用于指定输入记录中的字段分隔符。 - `-v` 变量=值:定义用户自定义变量。 #### 模式与条件 ...
这个"awk思维导图.jpeg单文件"很显然是为了帮助初学者更好地理解和掌握awk命令的工作原理及其应用。思维导图通常以图形化的形式将复杂的信息简化,使其更易于理解,因此这份图解会以直观的方式呈现awk的关键概念和...
下面将详细介绍`Awk`的一些核心概念和功能。 1. **awk 语法**: `Awk`程序由一系列规则组成,每条规则包含一个模式(Pattern)和可选的动作(Action)。基本语法是 `pattern { action }`。当输入行与模式匹配时,...
* 使用 awk 生成报表:`awk -f awk4.sh` awk 是一个功能强大且灵活的文本处理工具,广泛应用于 Linux 系统中的数据处理、文本处理和报表生成等领域。通过深入分析 awk 的使用和实现机制,可以更好地掌握 awk 的功能...
第四章 文件名置换 第五章 shell输入与输出 第六章 命令执行顺序 第二部分 文本过滤 第七章 正则表达式介绍 第八章 grep家族 第九章 AWK介绍 第十章 sed用法介绍 第十一章 合并与分割 第十二章 tr用法 第三部分 ...
在编写 AWK 脚本时,良好的编程实践是必要的,包括适当的注释和测试。 总结,AWK 是一个强大且灵活的文本处理工具,尤其适合对结构化的文本数据进行分析和操作。通过学习和熟练掌握其模式匹配、字段处理、条件语句...
第4 章 文件名置换 第5 章 shell输入与输出 第6 章 命令执行顺序 第7 章 正则表达式介绍 第8 章 grep家族 第9 章 AWK介绍 第10章 sed 用法介绍 第11章 合并与分割 第12章 tr用法 第13章 登录环境 第14章 ...
- 例如,假设我们想要找出所有薪资率超过100的员工,我们可以使用如下AWK命令: ```awk awk '$3 > 100 {print}' emp.dat ``` - 这条命令的意思是:“当第三字段(即薪资率)大于100时,打印整行记录。” #### ...
- **单引号 ('')**:用于区分 AWK 的命令与 shell 命令。 - **大括号 ({})**:表示一个命令组。 - **pattern**:这是一个过滤条件,只有当行满足这个条件时才会执行对应的 action。 - **action**:这是针对匹配行...
第4章 文件名置换 第5章 shell输入与输出 第6章 命令执行顺序 第二部分 文本过滤 第7章 正则表达式介绍 第8章 grep家族 第9章 AWK介绍 第10章 sed 用法介绍 第11章 合并与分割 第12章 tr用法 第三部分 登录环境 第13...
第4章 文件名置换 31 第5章 shell输入与输出 34 第6章 命令执行顺序 46 第二部分 文本过滤 第7章 正则表达式介绍 49 第8章 grep家族 56 第9章 AWK介绍 66 第10章 sed 用法介绍 89 第11章 合并与分割 104 第12章 tr...
第四章 文件名置换 第五章 SHELL输入输出 第六章 命令执行顺序 第二部分 文本过滤 第七章 正则表达式介绍 第八章 GERP家族 第九章 AWK介绍 第十章 SED用法介绍 第十一章 合并与分割 第十二章 TR用法 第三部分 登录...
第4章_文件名置换; 第5章_shell输入与输出; 第6章_命令执行顺序; 第7章_正则表达式介绍; 第8章_grep家族; 第9章_awk介绍; 第10章_sed用法介绍; 第11章_合并与分割; 第12章_tr用法; 第13章_登录环境; 第14...
第4章文件名置换.PDF 第5章shell输入与输出.PDF 第6章命令执行顺序.PDF 第7章正则表达式介绍.PDF 第8章grep 家族.PDF 第9章AWK 介绍.PDF 第10章sed 用法介绍.PDF 第11章合并与分割.PDF 第12章tr 用法.PDF 第13章登录...
AWK命令格式和选项 AWK程序通常由一系列模式和动作组成,其基本命令格式如下: ``` awk 'pattern { action }' file ... ``` 其中,`pattern`是匹配的模式,`action`是执行的操作,`file`是待处理的文件。另外,AWK...