一、AWK简介

awk:报告生成器,是以行为单位进行处理,并格式化后显示

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

二、AWK变量

2.1 awk内置变量之记录变量

FS: 默认是空白字符,指定输入分隔符
RS: 输入文本信息所使用的换行符
OFS: 输出字符分隔符
ORS: 输出行分隔符
FS or -F
[root@node1 ~]# cat test.txt
this is a test.
[root@node1 ~]# awk -F' ' '{print $0}' test.txt   FS可以使用-F选项,当没有使用-F选项的时候,awk默认-F选项为空格或者tab
this is a test.
[root@node1 ~]# awk '{print $0}' test.txt
this is a test.
RS

[root@node1 ~]# cat abc
1|2|3
[root@node1 ~]# awk 'BEGIN{RS="|"}{print $0}' abc   找到"|"符号,将它变成回车
1
2
3
OFS

[root@node1 ~]# cat test.txt
this is a test.
[root@node1 ~]# awk 'OFS=":"{print $1,$2,$3,$4}' test.txt 将文件的间隔由空格符换成分号
this:is:a:test.
ORS

[root@node1 ~]# cat abc

[root@node1 ~]# awk 'BEGIN{ORS="----\n"}{print $0}' abc   # 输出分隔符号。
----
----
----

2.2 awk内置变量之数据变量

NR: awk命令所处理的记录数 :如果有多个文件,这个数目会把处理的多个文件中行统一计数
FNR:与NR不同的是,FNR用于记录正处理的行是当前这一文件中被总共处理的行数
NF: 当前记录的字段个数
[root@node1 ~]# cat  test1  

[root@node1 ~]# cat test2 

NR

[root@node1 ~]# awk '{print NR}' test1 test2  # 两个文件行数之和

FNR

[root@node1 ~]# awk '{print FNR}' test1 test2  # 两个文件的行数分别显示出来
NF

[root@node1 ~]# cat test.txt
this is a test.
[root@node1 ~]# awk '{print NF}' test.txt   # NF是计算一行中的字段数 [root@node1 ~]# awk '{print $NF}' test.txt   # 而$NF则是一行中最后一个字段的简单表示方法
test.

三、printf
  printf命令的使用格式:
  printf format,item1,item2,...

要点:
  1、其与print命令的最大不同是,printf需要指定format;
  2、format用于指定后面的每个item的输出格式
  3、printf语句不会自动打印换行符;\n

format格式的指定符都以%开头,后跟一个字符,如下:
  %c: 显示字符的ASCII码;
  %s: 显示字符串

修饰符:
  N:显示宽度;
  -:左对齐
  +:显示数值符号

常见模式类型

  1、regexp:正则表达式,格式为/regular expression/
  2、expression:表达式,其值非0或为非空字符串时满足条件,如:$1 ~ /foo/ 或 $1 == "magedu",用运算符~(匹配)和!~(不匹配)
  3、ranges:指定的匹配范围,格式为part1,part2
  4、BEGIN/END:特殊模式,仅在awk命令执行前运行一次或结束前运行一次
  5、Empty(空模式):匹配任意输入行

例:取得/etc/passwd中每个用户名和shell格式化显示出来:

[root@node1 ~]# awk -F: '{printf "%-10s %-10s\n",$1,$NF}' /etc/passwd
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin ......
[root@node1 ~]# awk -F: 'BEGIN{printf "%-10s %-10s\n","User","Shell"}{printf "%-10s %-10s\n",$1,$NF}' /etc/passwd
User Shell
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
......

例:获取服务器tcp连接的每种状态数量

[root@node1 ~]# netstat -nat | awk '/^tcp/{++S[$NF]}END{for (i in S){print i,S[i]}}'
ESTABLISHED
LISTEN 4
/^tcp/  正则表达式: 匹配以tcp开头的行

{++S[$NF]}  获取每行的最后一个字节添加到数组,此时的S为数组 $NF为下标

END{for (i in S){print i,S[i]}}   处理完成后,通过下标循环打印出 下标 和 变量值
 

[ Linux 命令 ] awk的更多相关文章

  1. 【转】如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

    如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等   你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作——一些无法并 ...

  2. <转>如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

    原文链接:http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB) ...

  3. 转摘--如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

    http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或 ...

  4. 如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等(转)

    你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作——一些无法并行的操作.数据专家们,我是在对你们说.你可能有一个4核或更多核的CPU,但我们合适的工具,例如 grep, ...

  5. linux命令-awk入门

    最近经常查看nginx日志,有时候需要做一些统计分析,于是就想起了awk,学习了就顺便做一个记录. 目录 概述:简单介绍awk背景原理 基本用法:常用到的awk语法 内建变量 综合实例 概述 awk是 ...

  6. Linux命令awk

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

  7. linux命令-awk,sort,uniq

    学习地址:http://man.linuxde.net/awk#awk的工作原理 awk 选项参数说明: -F fs or --field-separator fs 指定输入文件折分隔符,fs是一个字 ...

  8. 每天一个linux命令--awk

    统计计算日志 pmail@app2linux04 performance]$ grep 'user:logBehaviorAction' performance.log|awk -F '|' '{pr ...

  9. 如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

    http://blog.chinaunix.net/uid-20662820-id-4023733.html http://www.faqs.org/faqs/snmp-faq/part2/ http ...

随机推荐

  1. winform 控件大小随着窗体自适应

    3个方法: #region 控件缩放变量        double formWidth;//窗体原始宽度        double formHeight;//窗体原始高度        doubl ...

  2. 前端JQuery中获取一个div下的多个id值

    获取所有的Id值,方法是通过div.class获取全局的值,然后再提取具体的Id值 方法一:用for循环,因为$("div.class")获取的是一个数组,通过循环读取出数组中的每 ...

  3. [android]不解锁刷机

    本人因为误操作进入andriod recovery模式,显示failed to boot 2,致手机无法恢复出厂值, 当时那叫一个郁闷.上论坛搜寻无数,唉让刷底包的无数(在此不解释),万恶的刷底包. ...

  4. STL中list的erase()方法

    http://www.cnblogs.com/gshlsh17/ rase()方法是删除iterator指定的节点  但是要注意的是在执行完此函数的时候iterator也被销毁了   这样的话关于it ...

  5. 《Effective STL》学习笔记

    http://www.cnblogs.com/arthurliu/archive/2011/08/07/2108386.html 作者:咆哮的马甲 出处:http://www.cnblogs.com/ ...

  6. 【linux】亲测成功_CentOS7.2/rhel7.2 忘记root密码及重置root密码的方法?

    本文转自:https://www.jb51.net/article/146320.htm  CentOS 7 root密码的重置方式和CentOS 6完全不一样,以进入单用户模式修改root密码为例. ...

  7. 好用的在线pdf转化器

    https://smallpdf.com/cn/compress-pdf

  8. WCF 透明代理

    现在我们通过类似的原理创建一个用于模拟WCF服务端和客户端工作原理的模拟程序.[源代码从这里下载] 目录 一.基本的组件和执行流程 二.创建自定义HttpHandler实现对服务调用请求的处理 三.定 ...

  9. QThread中的互斥、读写锁、信号量、条件变量

    该文出自:http://www.civilnet.cn/bbs/browse.php?topicno=78431 在gemfield的<从pthread到QThread>一文中我们了解了线 ...

  10. web颜色转换为delphi

    今天在写写一个日志浏览和报警功能时,要求用多种颜色去显示不同的信息,客户给出的颜色是web的 rgb颜色,就是用6位16进制数去表示的颜色,直接把他赋值给Delphi的TColor变量,发现显示的颜色 ...