[ Linux 命令 ] awk

一、AWK简介

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

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

二、AWK变量

2.1 awk内置变量之记录变量

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

[[email protected] ~]# cat abc1|2|3[[email protected] ~]# awk ‘BEGIN{RS="|"}{print $0}‘ abc   找到"|"符号,将它变成回车123
OFS

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

[[email protected] ~]# cat abc
1
2
3
[[email protected] ~]# awk ‘BEGIN{ORS="----\n"}{print $0}‘ abc   # 输出分隔符号。
1----
2----
3----

2.2 awk内置变量之数据变量

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

NR

[[email protected] ~]# awk ‘{print NR}‘ test1 test2  # 两个文件行数之和
1
2
3
4
5
6
7
8

FNR

[[email protected] ~]# awk ‘{print FNR}‘ test1 test2  # 两个文件的行数分别显示出来
1
2
3
1
2
3
4
5
NF

[[email protected] ~]# cat test.txt
this is a test.
[[email protected] ~]# awk ‘{print NF}‘ test.txt    # NF是计算一行中的字段数
4
[[email protected] ~]# 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格式化显示出来:

[[email protected] ~]# awk -F: ‘{printf "%-10s %-10s\n",$1,$NF}‘ /etc/passwd
root       /bin/bash
bin        /sbin/nologin
daemon     /sbin/nologin
adm        /sbin/nologin

......
[[email protected] ~]# 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连接的每种状态数量

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

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

END{for (i in S){print i,S[i]}}   处理完成后,通过下标循环打印出 下标 和 变量值
 
时间: 2024-10-20 10:30:12

[ Linux 命令 ] awk的相关文章

利用多核CPU来加速Linux命令 — awk、sed、bzip2、grep、wc

你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作--一些无法并行的操作.数据专家们,我是在对你们说.你可能有一个4核或更多核的CPU,但我们合适的工具,例如 grep, bzip2, wc, awk, sed等等,都是单线程的,只能使用一个CPU内核.借用卡通人物Cartman的话,"如何我能使用这些内核"?要想让Linux命令使用所有的CPU内核,我们需要用到GNU Parallel命令,它让我们所有的CPU内核在单机内做神奇的map-reduce操作

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

http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作——一些无法并行的操作.数据专家们,我是在对你们说.你可能有一个4核或更多核的CPU,但我们合适的工具,例如 grep, bzip2, wc, awk, sed等等,都是单线程的,只能使用一个CPU内核. 借用卡通人物Cartman的话,“如何我能使用这些内核”? 要想让Lin

Linux命令awk

1.简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大. 简单来说awk就是把文件逐行读入,默认以空格为分隔符将每行切片,切开的部分再进行各种分析处理. 2.使用方法 awk '{pattern + action}' {filenames} 其中 pattern 表示 awk 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令. 花括号 {} 不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令

linux命令---awk进阶

awk编程:    1.  变量:    在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义.变量的类型可以是数字.字符串.根据使用的不同,未初始化变量的值为0或空白字符串" ",这主要取决于变量应用的上下文.下面为变量的赋值负号列表: 符号 含义 等价形式 = a = 5 a = 5 += a = a + 5 a += 5 -= a = a - 5 a -= 5 *= a = a * 5 a *= 5 /= a = a / 5 a /= 5 %= a = a % 5 a %

linux命令-awk入门

最近经常查看nginx日志,有时候需要做一些统计分析,于是就想起了awk,学习了就顺便做一个记录. 目录 概述:简单介绍awk背景原理 基本用法:常用到的awk语法 内建变量 综合实例 概述 awk是创始人Aho, Kernighan and Weinberger的首字母简写,是一个基于列的流处理工具,在功能上是sed和grep的组合版,但不仅限于此,awk本身就是一种编程语言.awk依次读入每一行(默认按行分割,可以指定记录的分隔符),然后根据分隔符(默认是空白,一个或者多个空格.tab)把该

linux命令-awk

熟悉awk和print语法 fuhui@ubuntu:~$ ls -lh | awk '{print $5 }' BEGIN和END被包裹在一个单引号内 [email protected]:~$ ls -lh | awk 'BEGIN { count=0; print "start:" count}' 'END { print "total:" , count}' start:0 [email protected]:~$ ls -lh | awk 'BEGIN {

Linux命令:cp、time、cut、awk 、获取文件大小命令

最近写了一个shell脚本,用到了cp.time.cut.awk命令,把他们的使用方法给写下来: 1.cp和mv cp命令:用来完成文件的复制,从源文件夹复制到目标文件夹.执行后源文件夹和目标文件夹均有源文件. mv 命令:用来移动文件.执行后,源文件夹中没有源文件.我经常用mv命令来重命名文件 注意:cp命令源文件夹与目标文件夹不能使同一个:而在mv中可以是同一个. 命令解析: #cp [-R] 源文件 目标文件夹 cp -R 参数 ---当复制整个文件夹时使用. #mv 源文件 目标文件夹

Linux下awk命令详解

grep 或 egrep 或awk 过滤两个或多个关键词: grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行 egrep '123|abc' filename //用egrep同样可以实现 awk '/123|abc/' filename // awk 的实现方式 假如某个广告点击数据记录在文件里面,文件中每一行数据由'时间','uid'两个字段组成,要求每分钟统计某个uid带来的点击量并计入数据库,可以用shell来实现该功

Linux三剑客——awk命令

awk命令 awk命令用于Linux下的文本处理.数据可以来自文件或标准输入,支持正则表达式等功能,是Linux下强大的文本处理工具. 示例 #$1与$3相连输出,不分隔 [[email protected] ~]# awk -F ":" '{print $1 $3}' /etc/passwd #多了一个逗号,$1与$3使用空格分隔 [[email protected] ~]# awk -F ":" '{print $1,$3}' /etc/passwd #显示每行