基本用法

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

awk命令格式如下

awk [-F field-separator] 'commands' input-file(s)

[-F 分隔符]是可选的,因为awk使用空格,制表符作为缺省的字段分隔符,因此如果要浏览字段间有空格,制表符的文本,不必指定这个选项,但如果要浏览诸如/etc/passwd文件,此文件各字段以冒号作为分隔符,则必须指明-F选项

echo "this is a test" | awk '{ print $0 }'
## 输出为
this is a test

shell读取用户输入的字符串发现|,代表有管道。|左右被理解为简单命令,即前一个(左边)简单命令的标准输出指向后一个(右边)标准命令的标准输入

awk会根据分隔符将行分成若干个字段,$0为整行,$1为第一个字段,$2 为第2个地段,依此类推…

为打印一个字段或所有字段,使用print命令。这是一个awk动作

echo "this is a test" | awk '{ print $1 }'
## 输出为
this echo "this is a test" | awk '{ print $1, $2 }'
## 输出为
this is

/etc/passwd的文件内容如下

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

举几个简单的小需求

1.只显示/etc/passwd的账户

awk -F : '{ print $1 }' /etc/passwd

## 输出为
root
bin
daemon
adm
lp

2.显示/etc/passwd的第1列和第7列,用逗号分隔显示,所有行开始前添加列名start1,start7,最后一行添加,end1,end7

awk -F ':' 'BEGIN {print "start1,start7"} {print $1 "," $7} END {print "end1,end7"}' /etc/passwd

## 输出为
start1,start7
root,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
lp,/sbin/nologin
end1,end7

BEGIN语句在所有文本处理动作执行之前被执行,END在所有文本处理动作执行之后被执行

3.统计/etc/passwd文件中,每行的行号,每行的列数,对应的完整行内容

awk -F : '{ print NR "    " NF "    " $0 }' /etc/passwd

## 输出为
1 7 root:x:0:0:root:/root:/bin/bash
2 7 bin:x:1:1:bin:/bin:/sbin/nologin
3 7 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 7 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 7 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

1 支持内置变量

上面示例中NR,和NF其实就是awk的内置变量,一些内置变量如下

2 支持函数

输出字符串的长度

awk 'BEGIN { print length("this is a text") }'

## 输出为
14

将/etc/passwd的用户名变成大写输出

awk -F ':' '{ print toupper($1) }' /etc/passwd

## 输出为
ROOT
BIN
DAEMON
ADM
LP

常用函数如下

3 支持条件操作,正则表达式匹配

显示/etc/passwd中有daemon的行

awk -F ':' '$0 ~ /daemon/' /etc/passwd

## 输出为
daemon:x:2:2:daemon:/sbin:/sbin/nologin

awk条件操作符

4 支持流程控制语句,类C语言

if while do/while for break continue

输出第一个字段的第一个字符大于d的行

awk -F ':' '{ if ($1 > "d") { print $1 } else { print "-" } }' /etc/passwd

## 输出为
root
-
daemon
-
lp

可以把流程控制语句放到一个脚本中,然后调用脚本执行,如test.sh的内容如下

{
if ($1 > "d") {
print $1
} else {
print "-"
}
}

用如下方式执行,效果一样

awk -F ':' -f test.sh /etc/passwd

## 输出为
root
-
daemon
-
lp

5 应用场景

小编用awk进行文本分析比较少,主要用来写脚本

如一个weibo-interface-1.0.jar应用,启动脚本如下

start.sh

nohup java -jar weibo-interface-1.0.jar >out 2>&1 &

关闭脚本如下,kill.sh

kill -9 `jps -l | grep 'weibo-interface-1.0.jar' | awk '{print $1}'`

jps -l的输出如下

70208 com.st.kmp.main.KmpService
31036 com.st.cis.main.BaiduAnalysisService
66813 weibo-interface-1.0.jar

还有就是关闭hadoop集群的所有DataNode节点(不知道hadoop的可以认为DataNode是一个集群应用),假如一个个机器jps,查看pid,kill。很麻烦,直接写了一个脚本,依次ssh到各个节点,然后执行如下命令即可

kill `jps | grep 'DataNode' | awk '{print $1}'`

jps的输出为

508 DataNode
31481 JournalNode
31973 NodeManager

文章转自:https://www.toutiao.com/a6657442329009324556/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=1550123631&app=news_article&utm_source=weixin&iid=59913348678&utm_medium=toutiao_ios&group_id=6657442329009324556

kill `jps | grep 'DataNode' | awk '{print $1}'`

Linux文本分析命令awk的妙用的更多相关文章

  1. linux文本分析利器awk

    转 快速理解linux文本分析利器awk 原文链接 杜亦舒 性能与架构 awk是什么 如果工作中需要操作linux比较多,那么awk是非常值得学习的 awk是一个极其强大的文本分析工具,把文件逐行的读 ...

  2. linux 文本分析工具---awk命令(7/1)

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  3. Linux文本处理命令 -- awk

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  4. Linux 文本相关命令(1)

    Linux 文本相关命令(1) 前言 最近线上环境(Windows Server)出现了一些问题,需要分析一下日志.感觉 Windows 下缺少了一些 Linux 系统中的小工具,像在这波操作中用到的 ...

  5. 编程小技巧之 Linux 文本处理命令

    合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本文简单的介绍三个能使用 Linux 文本处理命令的场景,给大家开阔一下思路 ...

  6. 一个不会coding的girl Linux日常之命令awk

    Linux日常之命令awk 参考:http://www.zsythink.net/archives/tag/awk/ 一. 命令awk简介 1. awk是一种编程语言,用于对文本和数据进行处理的 2. ...

  7. Linux文本相关命令

    Linux文本相关命令 目录 Linux文本相关命令 文本排序命令 文本去重命令 基础命令cut 文本三剑客 sed awk grep 文本排序命令 sort 常用参数: -n:以数值大小进行排序 - ...

  8. linux文本处理命令

    linux文本处理命令 1.wc命令 基本介绍 文件的行统计.字符统计.字节统计 基本语法 wc  [OPTION]...  [FILE]... wc  [OPTION]...  --files0-f ...

  9. 编程小技巧之 Linux 文本处理命令(二)

    合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本篇文章是<Linux 文本处理命令> 续篇,在前文的基础上再介 ...

随机推荐

  1. ionic 照相机 Camera

    1.官网: https://ionicframework.com/docs/native/camera/#DestinationType 2.引入插件 $ ionic cordova plugin a ...

  2. React多行文本溢出处理(仅针对纯文本)

    最多显示4行,第四行末尾显示“...”

  3. Activemq -- Spring 整合

    转自: https://www.cnblogs.com/jaycekon/p/ActiveMq.html

  4. Javascript入门(二)变量、获取元素、操作元素

    一.变量 Javascript 有五种基本数据类型 number.String.boolean.undefined.null 一种复合类型:object 二.使用getElementById方法获取元 ...

  5. python 携带cookie获取页面内容

    有时会遇到爬取的页面需要登录,这就要带上cookie了. 下面记录了几种携带cookie的方法 # coding=utf-8 import requests s = requests.Session( ...

  6. UML类图表达

    什么是UML类图? 类图显示了一组类.接口.协作以及他们之间的关系.在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统.类加上他们之间的关系就构成了类图,类图中还可以包 ...

  7. SpringSocial业务系统与社交网站的绑定与解绑

    SpringSocial提供了了以下三个服务,我们要做的仅仅是调用它们的服务,但是SpringSocial仅仅只提供了数据,没有提供视图 ⒈拿到所有社交网站与业务系统的绑定信息 SpringSocia ...

  8. 【原理】VRRP详解

    写在前面 keepalived是一个基于VRRP协议来实现的服务高可用方案,从而可以避免IP单点故障.一般与其他负载均衡技术,如LVS,Nginx等一起来工作来达到集群高可用的目的 关于Keepali ...

  9. flask与数据库连接相关操作

    ---恢复内容开始--- 首先要安装  flask-sqlalchemy 数据库连接设置 在flask-SQLAlchemy中,数据库使用URL指定,而且程序使用的数据库必须保存到flask配置对象的 ...

  10. Visual Studio VS2010统计代码行数

    按CTRL+SHIFT+F (Find in files),勾上支持正则表达式,然后输入搜索内容: ^:b*[^:b#/]+.*$ 以上表达式的统计可做到:#开头和/开头或者空行都不计入代码量.如果需 ...