awk命令

最近上服务器看东西,看到有几个shell脚本都有awk命令,对这个命令不是很熟悉,于是整理了一下这个命令的用法。

Linux awk 命令

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

语法

1.命令行方式
awk [-F field-separator] ‘commands’ input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格

2.shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
相当于shell脚本首行的:#!/bin/sh
可以换成:#!/bin/awk

基础示例

ps -ef | grep java | awk {'print $2'}

高级示例

ps aux | grep Bootstrap.java | grep -v grep | awk '{print $2}' | xargs kill -9

xargs 包含需强制杀死的pid,而 ps aux | grep Bootstrap.java | grep -v grep | awk ‘{print $2}’ 的效果需要说明Linux的一个原理

管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入

解析如下:

1、ps aux 显示所有的进程

2、ps aux | grep Bootstrap.java 作用是把包括Bootstrap.java 这个关键字的进程都显示出来

3、如上图中所示 ps aux | grep Bootstrap.java 会把 grep Bootstrap.java 的进程也统计进来,因此用 ps aux | grep Bootstrap.java | grep -v grep去除grep进程
4、然后,只包含 Bootstrap.java 关键字的进程筛选结果作为输入给 awk ‘{print $2}’,这个部分的作用是提取输入的第二列,而第二列正是进程的PID
5、最后将 PID 交给 xargs,进行强制杀死

其他

grep 是查找含有指定文本行
grep -v 是取反,比如 grep -v grep 就是查找 不含有 grep 内容的行,简单来说,就是过滤输入的 grep 命令

(完)

发表评论

邮箱地址不会被公开。 必填项已用*标注