linux里awk命令 linux常用命令awk

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命令篇二:命令操作符 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个字符 。
【linux里awk命令 linux常用命令awk】 $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命令我使用awk命令时 , 用的次数最多的是 从stdin或文件里选取几列输出。
awk的print语句:
很久之前 , 在python celery文档里见过下面的这个命令,正是因为当时看不懂这个命令,才开始浅学awk和xargs 。
每日一条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 命令详解(二) if 分支 数组一、awk if分支结构
二、awk数组 for循环
一、awk if分支结构
案例1
awk过滤中的if分支结构
1)单分支
统计/etc/passwd文件中UID小于或等于1000的用户个数linux里awk命令:
统计/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数组
注意linux里awk命令 , awk数组的下标除了可以使用数字linux里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命令是Alfred Aho, Peter Weinberger, Brian Kernighan三位作者联合开发的,用于Linux/Unix中处理数据和产生报告 。awk命令功能十分强大,可根据需要抓取、截取指定的列或行 。
首先在/mnt目录下创建示例文本文件f1,其内容如下:
1 hello hello
2 data data
3 xyz abc
4 123 789
5 ftp
6 Apache
7 apache
然后,使用awk对f1文件内容进行处理,举例如下 。
①awk -F " " '{print $2,$3}' f1:截取显示文档的第二列和第三列,-F指定分隔符为空格,$表示显示第几列 。其中print表示要做输出信息的动作,$2和$3表示要输出的列号,awk要求将print已经输出列等内容放在“'{}'”之间 。
②awk -F " " '($13){print $2,$3}' f1:选取第一列的值大于3的行,显示其第二列和第三列,在“()”中指定筛选条件 。
③awk 'NR==4 || NR==3' f1:显示第三行和第四行 , NR表示行号 。
④awk '/data/ {print $2}' f1:抓取包含指定字符的行,再对列进行截取 。此例中,awk先按照“data”字符串对文件f1中的行筛选 , 找出包含“data”的行以后,再按照默认的空格作为分隔符对行的内容做切割,仅打印出第二列的内容 。
⑤awk '$2 ~ /data/ ' f1:抓取第二列包含指定字符的行 。其中“~”表示是否匹配指定的“data”,如果第二列的内容包含“data”就打印出整行内容 。
⑥awk '$2 !~ /data/ ' f1:抓取第二列不包含指定字符的行 。其中“!~”表示是否不匹配指定的“data”,如果第二列的内容不包含“data”就打印出整行内容 。
linux里awk命令的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于linux常用命令awk、linux里awk命令的信息别忘了在本站进行查找喔 。

    推荐阅读