linux统计命令,linux awk命令统计模式扫描和处理语言详解

一些会比较经常用到的Linux下的工具,当然都是命令行。多数工具需要与正则表达式配合使用,所以可以很多工具使用前都需要先了解正则表达式,正则表达式可以参考这里正则表达式学习笔记

关于

awk其实并不算一个工具,相当于是一个脚本语言,awk就是这个脚本语言的解释器,这是GNU手册中的定义:pattern scanning and processing language。本文就把它当成一个简单的文本流处理工具来用,虽然我们有了sed,但sed在处理一行中的各列(某种分隔符进行分隔的字符串)时远没有awk功能强大。awk也是以某种模式一行行地处理各列,但对于各列中的内容可以非常精确化地处理。awk会将所处理行中的各列分别赋给$1..$n,$0表示当前一整行。

awk的用法为:awk [可选项] '脚本' [INPUTFILES],或者处理awk脚本文件:awk [可选项] -f SCRIPTFILE [INPUTFILES],当然awk也可以直接用于处理管道传递来的文本流

下面分别说一下这几部分:

可选项

awk的可选项非常多,这里只说几个常用的-F[fs] 指定列项分隔符fs,fs可以是一个字符串或者表达式,如-F:表示以:分隔的各列,默认情况下分隔符是空格或tab

-f SCRIPTFILE 从脚本文件中读取awk命令

-v var=value 自定义一个变量并赋值

脚本语句

awk的脚本语句格式通常为:'[条件判断1][命令1] [条件判断2][命令2]...'

脚本需要被放在单引号中,条件类型和命令都是可选的,当只有条件判断而没有命令时,则会输出符合条件的整行。当然如果只有命令而没有条件判断时,则对每一行按命令处理。命令及命令参数需要使用一对大括号括起来,最常用的命令就是print和printf,这两个命令其实都是linux内建的命令,prinf用于输出变量,类似与echo,默认在结尾输出换行。printf类似于C语言中的格式化输出函数printf,可以根据格式化输出参数来格式化输出,默认没有换行,所以如果需要换行就需要使用n,不需要使用小括号,直接将需要。

先来举几个个简单的例子:

此处都是/etc/passwd文件为例

输出/etc/passwd中的第三列小于10的行:

awk -F: '$3<10' /etc/passwd

这里我们通过-F指定分隔符为:,因为/etc/passwd中的各行包含的内容都以:分隔,然后使用$3取第3列与数字10进行比较

输出passwd中各行第1列与第3列的内容:

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

这里print后面跟的变量以逗号(,)分隔,默认输出结果以空格分隔,如果想要以其他方式分隔中间直接插入双引号引入的字符串即可,例如输出结果以->分隔:print $1"->"$3,不分隔:print $1$3

将第一列与第3列使用->连接并将第3列以16进制输出:

awk -F: '{printf "%s->%xn", $1,$3}' /etc/passwd

awk模式扫描和处理语言

功能描述:

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

命令语法:

awk[选项][文件]

awk[选项][程序][文件]

awk命令选项含义

选项含义

-f从指定程序文件读取AWK程序源

-F使用指定文件系统为输入字段分隔符

-v开始执行程序之前为变量值

-mf设置不同的内存限制值。f标志设置字段的最大数目

-mr设置不同的内存限制值。r标志设置最大记录大小

-O在程序的内部表示启用优化

--compat运行在兼容模式下

--dump-variables=显示全局变量、其类型值和最终值到文件的排序列表

--exec=类似于-f选项,但这是选项的最后一个处理

--gen-po扫描和解析AWK程序,并在标准输出上生成一个GNU.po格式文件

--non-decimal-data在输入数据中识别八进制和十六进制值

--profile=发送分析数据文件。默认值是awkprof.out

--re-interval启用正则表达式匹配使用间隔表达式

--source=使用指定程序文本作为AWK程序的源代码

--traditional匹配传统的UNIX awk正则表达式

--usage显示在标准输出上可用的选项相对简短摘要

--use-lc-numeric当解析输入数据时强制使用语言环境的小数点字符

内置变量

内置变量描述

ARGC命令行参数个数

ARGV命令行参数排列

ENVIRON包含当前环境的值的数组

FILENAME当前输入文件的名称

FNR当前输入文件的输入记录数

FS输入字段分隔符,默认情况下为一个空格

NF在当前输入记录中的字段的数目

NR已读的记录数

OFS输出字段分隔符

ORS输出记录分隔符

RS输入记录分隔符,默认情况下为一个换行符

OFMT用于数字的输出格式

RT记录终止符

RSTART匹配第一个字符的索引

RLENGTH匹配字符串长度

SUBSEP字符用于分隔多个标在数组中的元素,默认情况下是“

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值