码迷,mamicode.com
首页 > 系统相关 > 详细

shell 之awk 小记

时间:2016-08-02 17:27:10      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:字符串

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

一个完整的 awk 语句为:Awk ‘[patten]{action}……’, 其中 pattern 缺省为 1,action 缺省为

{print}。

那么awk ‘1’完整的写法就是awk ‘1{print}’; 同理, awk ‘{print}’完整的写法也是awk ‘1{print}’。


awk ‘! a[$0]++’ 怎么理解?

这是一个非常经典的去重复项的 awk 语句


awk 命令

用途

在文件中查找与模式匹配的行,然后在它们上面执行特定的操作。

语法

awk [ -F Ere ] [ -v Assignment ] ... { -f ProgramFile | ‘Program‘ } [ [ File ...

| Assignment ... ] ] ...

在 awk 命令语言语法中使用四种类型的模式:

正则表达式

关系表达式

模式的组合

BEGIN 和 END 模式


length( 字符串 ) : 传回该字符串的长度.

[root@localhost ~]# awk ‘BEGIN {print length ("qiruyi")}‘

6

输入以下一行命令:

awk ‘/smi/‘ testfile

将把包含 smi 字符串的具体值的所有记录打印至标准输出。

命令行:

awk ‘/smith+ern/‘ testfile

将包含字符 smit,后跟一个或多个 h 字符,并以字符 ern 结束的字符串的任何记录打印至标准输出


|指定如果以 |(垂直线)隔开的字符串的任何一个在字符串中,则字符串匹配。命令行:

awk ‘/allen |alan /‘ testfile

将包含字符串 allen 或 alan 的所有记录打印至标准输出。此示例中的输出是:

smiley, allen

smith, alan


{m,}指定如果至少 m 个模式的具体值在字符串中,则字符串匹配。命令行:

awk ‘/t{2,}/‘ testfile

打印至标准输出:

smitters, alexis


[String]指定正则表达式与方括号内 String 变量指定的任何字符匹配。命令行:

awk ‘/sm[a-h]/‘ testfile

将具有 sm 后跟以字母顺序从 a 到 h 排列的任何字符的所有记录打印至标准输出。此示例的输出是:

smawley, andy


^指定字段或记录的开头。命令行:

awk ‘$2 ~ /^h/‘ testfile

将把字符 h 作为第二个字段的第一个字符的所有记录打印至标准输出。此示例中的输出是:

smithern, harry


$指定字段或记录的末尾。命令行:

awk ‘$2 ~ /y$/‘ testfile

将把字符 y 作为第二个字段的最后一个字符的所有记录打印至标准输出。此示例中的输出是:

smawley, andy

smithern, harry


\ (反斜杠)转义字符。当位于在扩展正则表达式中具有特殊含义的任何字符之前时,转义字符除去该字符

的任何特殊含义。例如,命令行:

/a\/\//

将与模式 a //

匹配,因为反斜杠否定斜杠作为正则表达式定界符的通常含义。要将反斜杠本身指定为字符,则使用双

反斜杠。


识别的转义序列

awk 命令识别大多数用于 C 语言约定中的转义序列, 以及 awk 命令本身用作特殊字符的几个转义序列。 转

义序列是:

转义序列表示的字符

\"\"(双引号)

\//(斜杠)字符

\ddd 其编码由 1、2 或 3 位八进制整数表示的字符,其中 d 表示一个八进制数位

\\\ (反斜杠) 字符

\a 警告字符

\b 退格字符

\f 换页字符

\n 换行字符(请参阅以下的注)

\r 回车字符

\t 跳格字符

\v 垂直跳格


语言中的六种条件语句是:

if 需要以下语法:

if ( Expression ) { Statement } [ else Action ]

while 需要以下语法:

while ( Expression ) { Statement }

for 需要以下语法:

for ( Expression ; Expression ; Expression ) { Statement }

break 当 break 语句用于 while 或 for 语句时,导致退出程序循环。

continue 当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。


要显示字 start 和 stop 之间的所有行,包含“start”和“stop”,请输入:

awk ‘/start/,/stop/‘ chapter1

要运行一个处理文件 chapter1 的 awk 命令程序 sum2.awk,请输入:

awk -f sum2.awk chapter1


要以相反顺序打印前两个字段,请输入:

awk ‘{ print $2, $1 }‘ chapter1


如何打印单双引号?

awk ‘BEGIN {print "single quote --> \047";print "double quote --> \042" }‘


1. 除去重复项, 这个不多说, 只给出代码:

1. awk ‘!a[$0]++‘ file(s)

2. awk ‘!($0 in a){a[$0];print}‘ file(s)


shell 之awk 小记

标签:字符串

原文地址:http://21024.blog.51cto.com/11024/1833415

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!