linux中awk命令学习

awk是一个强大的文本分析工具,awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

通常获取某一行时,我们会使用 “grep 关键字“进行查找,但在读取某一列时,就非awk莫属。

使用方法

awk 'pattern {action}' {filenames}

 pattern: 正则表达式或者关键字,既可以过滤出需要分析的语句,以"/"始以“/”终。

action:action在一个花括号中,表示一个逻辑编码块,通常只需要‘{print $数字}’。

参数 : -F  '关键字' 表示使用关键字进行切片。

如何获取Id这列:nova service-list | awk '{print $2}' 。就这么简单,注意花括号用单引号。默认是从1开始的,0表示全部。

但此刻只想获取数字,不打印出Id,这时只需要在{}中添加打印条件即可。nova service-list| awk '{if (NR>3) print $2}'

使用 -F 参数,使用:切片/etc/passwd 获取用户名。

使用pattern 匹配,相当于使用grep 进行一次删选,然后再执行awk分割打印,比如打印出包含var的用户

从中获取的id号,我们可以继续编程,查询每个id的信息。比如id是用户id,就可以通过id查询用户的信息。如果一个一个查,势必比较慢,这时可以借助linux的for循环助力。这里查询openstack的flavor并展现每个flavor的信息。展示一个flavor的信息:

在awk中NR 表示number row 行号, FR 表示field number列号

for line in `nova flavor-list |awk '{if(NR>3)print $2}'`;do echo $line;nova flavor-show $line;done

 在for...in...do...done,每句都需要以分号隔开。可以从中再用grep命令选出flavor中每个的vcpus行。 

在使用grep命令时,如果是选取其中vcpus和ram都进行展示,则需要 "|" 进行或选取。对|进行转义,表示或运算,而不是|字符串

原文地址:https://www.cnblogs.com/CaesarLinsa/p/8596822.html