菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
322
0

awk

原创
05/13 14:22
阅读数 79381

 

一看到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 、、、、

 

 

 

发表评论

0/200
322 点赞
0 评论
收藏