一看到awk,我就想到了一些恐怖奇怪的东西:awesome,awkard。。。
一直觉得难用, 记不住他的用法
http://www.cnblogs.com/jxnulxl/articles/566974.html
语法:
awk '{pattern + action}' {filenames}
其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号 ({}) 不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组
awk的语法:
与其它UNIX命令一样,awk拥有自己的语法:
awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]
参数说明:
-F re:允许awk更改其字段分隔符。 F参数默认为空格
parameter: 该参数帮助为不同的变量赋值。
'prog': awk的程序语句段。这个语句段必须用单拓号:'和'括起,以防被shell解释。这个程序语句段的标准形式为:
'pattern {action}' pattern有些类似sed,以//包围的正则表达式re
其中pattern参数可以是egrep正则表达式中的任何一个,它可以使用语法/re/再加上一些样式匹配技巧构成。与sed类似,你也可以使用","分开两样式以选择某个范围。关于匹配的细节,你可以参考附录,如果仍不懂的话,找本UNIX书学学grep和sed(本人是在学习ed时掌握匹配技术的)。 action参数总是被大括号包围,它由一系统awk语句组成,各语句之间用";"分隔。awk解释它们,并在pattern给定的样式匹配的记录上执行其操作。与shell类似,你也可以使用“#”作为注释符,它使“#”到行尾的内容成为注释,在解释执行时,它们将被忽略。你可以省略pattern和 action之一,但不能两者同时省略,当省略pattern时没有样式匹配,表示对所有行(记录)均执行操作,省略action时执行缺省的操作——在标准输出上显示。
-f progfile:允许awk调用并执行progfile指定有程序文件。progfile是一个文本文件,他必须符合awk的语法。
in_file:awk的输入文件,awk允许对多个输入文件进行处理。值得注意的是awk不修改输入文件。如果未指定输入文件,awk将接受标准输入,并将结果显示在标准输出上。awk支持输入输出重定向。
awk '/^int/{print $2}' c/*.c 一行行的读取c文件,然后找到以int开头的行(^表示开头,不少非),以空格分隔之,打印数组第二个值, print则是打印整行!
其实这个的基本用法 还是很简单的:
who am i| awk -F'(' '{print $2}' | awk -F')' '{print $1}'
10.74.169.50
id | awk -F'(' '{print $2}' | awk -F')' '{print $1}' 获取当前登录用户的用户名
id | awk -F'(' '{print $2}' ———— 这里有两组引号, 不要看到这个就眼花眼晕! 有时候更多,
———— 对于F参数,使用单引号或者双引号都可以!! 可以混用, 但是不可以不匹配! 双引号则会解析其中内容。。。 它不是必须的;单对于特殊字符则是不行的,不加引号是不行的! !
echo `who am i` | awk -F'(' '{print $2}' | awk -F ) '{print $1}' // 特殊字符 ) ,不加引号是不行的 -bash: syntax error near unexpected token `)' echo `who am i` | awk -F'(' '{print $2}' | awk -F % '{print $1}' 10.74.169.50) echo `who am i` | awk -F'(' '{print $2}' | awk -F 2 '{print $1}' 10.74.169.50)
———— 对于第二个参数,即函数print的内容,只能使用单引号!!
echo `who am i` | awk -F'(' '{print $2}' | awk -F')' "{print $1}"
10.74.169.50)
第一个分号是说分隔符,第二个是对awk分割的结果进行操作: 此处是打印分隔出来的第二个列:$2
f 参数: 指定文件, 用于执行某些命令, 而不是输入文件,—— 我奇怪这个f 到底什么时候有用
---------
又复习了一把
学习了BEGIN END的用法
语法:
awk BEGIN{action} {action} END{action}
awk 后面的三个部分都是可以省去的。
内置变量: NR number 、、、
内置函数: printf、 split 、、、、