linux命令awk整理 linux awk用法

每日一条linux 命令 : awk

一次读取一行文本,按输入分隔符进行切片,切成多个组成部分,将每片直接保存在内建的变量中,$1,$2,$3....,引用指定的变量,可以显示指定段,或者多个段。如果需要显示全部的,需要使用$0来引用。可以对单个片段进行判断,也可以对所有段进行循环判断。

成都创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的西城网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

其默认分隔符为空格

awk [options] 'program' FILE......

[options]说明

主要有两种模式

1、 awk [options] 'scripts' file1,file2.....

在这种模式中,scripts主要是命令的堆砌,命令之间用 分号 分割;对输入的文本行进行处理,通过命令 print,printf 或是输出重定向的方式显示出来,这里经常用到的知识点是:awk的内置变量,以及命令print和printf的使用

2、 awk [options] 'PATTERN{action}' file,file2.....

在这种模式中,最重要的是5种模式和5种action的使用,以及awk的数组的使用和内置函数

其格式化输出: printf FORMAT,item1,item2....

例子: awk '{printf "%-8s %-8s %-8s %-18s %-22s %-15s\n",$1,$2,$3,$4,$5,$6}' netstat.txt

格式符

修饰符

输出重定向

awk [option] 'PATTERN{action}' file1,file2....

Linux三剑客awk命令篇二:命令操作符

Linux三剑客awk命令篇二:命令操作符

关于awk的原理等基本知识请参考上篇:

Linux三剑客awk命令篇一:原理及基本命令

补充

1、语法格式:

(1) Awk完整语法

awk 'BEGIN{commands} pattern{commands}END{commands} ' file

BEGIN{commands}:处理数据前执行的命令。

END{commands}:处理完数据后执行的命令。

这两个命令可以省略。见(2)

(2) Awk基本语法

awk -F '分割符' '/模式/{动作} ' file

这里的 '/模式/{动作} ' 类似于sed的命令格式。

模式:

(1) 正则表达式(注意格式: /正则表达式/ )

(2) 条件表达式(例如: 等等)

总结:

这里的模式通俗来讲是 用来找谁, 而动作表示是 干啥。

2、 awk的命令操作符

(1) 正则表达式与bash一致

(2) + - * / % ++ --

(3) || !

(4) = = != == ~ !~

~:表示匹配后面的模式,用于字段,见 案例1 。

其余的都比较常见就不举例了。

3、案例

案例1:

~使用案例

awk -F : '$3 ~ /\...\/{print $1,$3}' /etc/passwd

解释:

模式:\...\

\ \表示定界符,只匹配3个字符。

$3 ~:表示$3这个字段必须符合后面模式(\...\)的要求。

见如下输出结果,$3都是3个字符。

案例2:

% || ==使用案例

seq 100 | awk '$1 % 7 == 0 || $1 ~ /^99/{print $1}'

输出结果的要求:

整除7或者以99开头

案例3:

++使用

awk 'BEGIN{num=0}{num++}END{print num}' /etc/passwd

简单解释:

BEGIN{num=0}:定义一个变量num

{num++}:这里没有模式,只有动作。

即每匹配到文件/etc/passwd的一行就执行num++

END{print num}:文件遍历结束,打印num的值,即文件的行数。

这里我们使用wc -l验证也是没问题的。

cat /etc/passwd | wc -l

上面3个案例简单的使用了awk的命令操作符。

虽然只是用到了几个简单的,但是其他同理,大家可以执行操作。

下一篇:

Linux三剑客awk命令篇二之内部变量

欢迎大家给予宝贵的意见或者建议。

欢迎大家补充或者共享一些其他的方法。

感谢支持。

Linux awk 命令详解(二) if 分支 数组

一、awk if分支结构

二、awk数组 for循环

一、awk if分支结构

案例1

awk过滤中的if分支结构

1)单分支

统计/etc/passwd文件中UID小于或等于1000的用户个数:

统计/etc/passwd文件中UID大于1000的用户个数:

统计/etc/passwd文件中登录Shell是“/bin/bash”的用户个数:

2)双分支

分别统计/etc/passwd文件中UID小于或等于1000、UID大于1000的用户个数:

分别统计/etc/passwd文件中登录Shell是“/bin/bash”、 登录Shell不是“/bin/bash”的用户个数:

二、awk数组

注意,awk数组的下标除了可以使用数字,也可以使用字符串,字符串需要使用双引号:

案例3:awk扩展应用

1)awk统计Web访问排名

在分析Web日志文件时,每条访问记录的第一列就是客户机的IP地址,其中会有很多重复的IP地址。因此只用awk提取出这一列是不够的,还需要统计重复记录的数量并且进行排序。

通过awk提取信息时,利用IP地址作为数组下标,每遇到一个重复值就将此数组元素递增1,最终就获得了这个IP地址出现的次数。

针对文本排序输出可以采用sort命令,相关的常见选项为-r、-n、-k。其中-n表示按数字顺序升序排列,而-r表示反序,-k可以指定按第几个字段来排序

实现此案例需要按照如下步骤进行。

步骤一:统计Web访问量排名

分步测试、验证效果如下所述。

1)提取IP地址及访问量

2)对第1)步的结果根据访问量排名

案例4:编写监控脚本

本案例要求编写脚本,实现计算机各个性能数据监控的功能,具体监控项目要求如下:

CPU负载

网卡流量

内存剩余容量

磁盘剩余容量

计算机账户数量

当前登录账户数量

计算机当前开启的进程数量

本机已安装的软件包数量

步骤

实现此案例需要按照如下步骤进行。

步骤一:准备工作

1)查看性能数据的命令

步骤二:编写参考脚本

1)脚本内容如下:

Linux 简单使用awk命令

我使用awk命令时,用的次数最多的是 从stdin或文件里选取几列输出 。

awk的print语句:

很久之前,在python celery文档里见过下面的这个命令,正是因为当时看不懂这个命令,才开始浅学awk和xargs。

Linux入门系列——awk命令详解

awk是一个强大的文本分析工具,与grep、sed相比,awk在对数据分析并生成报告时,显得有很大的优势。

awk有三个不同的版本:awk、nawk和gawk,在没有做特殊说时的时候默认的就是gawk,gawk是awk的GNU版本。

其中command是真正的awk命令,-F表示域的分隔符,是个可选项。Filename是等待处理的文件

将所有的awk命令写入到一个文件,并使用该文件有X权限,然后awk命令解释器作为脚本的首行,也就是说可以把脚本最开始的 #!/bin/bash 换成 #!/bin/awk

最后直接执行这个脚本文件就行了。

-f 指定要加载的awk脚本,是一个文件。Filename是等待处理的文件

awk的工作流程是这样的:读入一行后(最后面带有” ”的),就按-F指定的分隔符来将该行划分成N个区域,$0表示所有的区域,$1表示第一个域,$2表示第二个域,依此类推,$n表示第n个域。

总结:awk先执行BEGIN内的命令,然后再读入文件中的行,接着就是按照指定的分隔符将该行分成N个区域,然后再来执行模式所对应的动作action。然后,再来读入第二行。。再重复执行action,直到所有的行都处理完成。最后再执行END中的命令。

注意:' // '之间是支持正则表达式的,如果此处只有pattern,而没有action,那么awk默认会把匹配到的行打印出来。

awk中的print还可以使用C语言中的printf来替代。在输出格式比较复杂的时候使用printf函数会比print函数要更直观一些,如下:

还可以使用-v key=value来自定义变量。如下:

awk中的条件语句是从C中借鉴过来的

语法:if (condition) {then-body} else {else-body}

例如使用awk来统计某个目录下的普通文件的大小,不包括子目录的,并过滤掉目录。

循环语句也和C中的一样,支持while、do/while、for、continue、break等关键字。

break和continue常用于循环中;

在awk中,数组的下标可以是数字或字母。一般awk中的数组的作用是从记录中收集信息,用于计算总和、统计单词等。

在awk中要删除一个元素的时候使用 delete array[index]

更多请参见awk官方文档[]

linux awk命令详解

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在对数据分析并生成报告时,显得尤为强大。

简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk有三个不同的版本:awk、nawk和gawk,未作特别说明,一般指gawk,gawk是awk的GNU版本。

之所以叫awk是因为其取了三位创始人Alfred Aho,Peter Weinberger,和Brian Kernighan的Family

Name的首字符。

awk格式:

格式: sed -n '3p' sed.txt

找谁干啥(条件动作)

awk格式

#取出/etc/passwd 第1行的第1列和第3列

awk -F: 'NR==1{print $1,$3}' /etc/passwd

awk 选项 '条件{动作}' /etc/passwd

条件: 哪一行,过滤什么内容

动作: print输出与显示 ,计算....

awk取行:与sed类似

案例01:取出sed.txt的第2行

[root@oldboy81-golden-lnb /oldboy]# cat sed.txt

101,oldgirl,CEO

102,zhangya,CTO

103,lidao007,COO

104,yy,CFO

105,feixue,CIO

110,lidao,COCO

[root@oldboy81-golden-lnb /oldboy]# awk 'NR==2' sed.txt

102,zhangya,CTO

#awk '行号 等于 2' sed.txt

#NR awk内置变量

Number of Record 记录号(行号)

案例02:取出sed.txt中包含oldboy或lidao的行

[root@oldboy81-golden-lnb /oldboy]# sed -rn '/oldboy|lidao/p' sed.txt

103,lidao007,COO

110,lidao,COCO

[root@oldboy81-golden-lnb /oldboy]# awk '/oldboy|lidao/' sed.txt

103,lidao007,COO

110,lidao,COCO

案例03:取出文件第2行到第5行内容

#awk '行号大于等于2 并且 行号小于等于5' sed.txt

#方法01

awk 'NR=2 NR=5' sed.txt #必会

表示并且.

#方法02

sed -n '2,5p' sed.txt

#方法03 了解

awk 'NR==2,NR==5' sed.txt #从行号是2的行开始 到 行号是5的行结束( 了解)

案例04:取出文件第3行到最后一行内容

[root@oldboy81-golden-lnb /oldboy]# awk 'NR = 3' sed.txt

103,lidao007,COO

104,yy,CFO

105,feixue,CIO

110,lidao,COCO

[root@oldboy81-golden-lnb /oldboy]# sed -n '3,$p' sed.txt

103,lidao007,COO

104,yy,CFO

105,feixue,CIO

110,lidao,COCO

案例05:取出从包含oldboy的行到lidao的行

[root@oldboy81-golden-lnb /oldboy]# cat sed.txt

101,oldgirl,CEO

102,zhangya,CTO

103,lidao007,COO

104,yy,CFO

105,feixue,CIO

110,lidao,COCO

root@oldboy81-golden-lnb /oldboy]# sed -n '/old/,/lidao/p' sed.txt

101,oldgirl,CEO

102,zhangya,CTO

103,lidao007,COO

[root@oldboy81-golden-lnb /oldboy]# awk '/old/ , /lidao/' sed.txt

101,oldgirl,CEO

102,zhangya,CTO

103,lidao007,COO


本文标题:linux命令awk整理 linux awk用法
URL地址:http://hbruida.cn/article/docdjoh.html