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都进行展示,则需要 "\|" 进行或选取。\对|进行转义,表示或运算,而不是|字符串