一些会比较经常用到的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字符用于分隔多个标在数组中的元素,默认情况下是“