目录
一、AWK
干什么用的?
使用起来有什么条件?
怎么使用?
二、sed
功能?
sed怎样读取数据?
怎样调用sed ?
三、sort
功能是什么?
命令有哪些?
本文只讲解了一些简略的知识框架,如需详细学习,附录几本参考书籍,百度网盘自行下载:
链接:https://pan.baidu.com/s/1uqBeL7FF0GiG4EzmWk90sg?pwd=3905
提取码:3905
引言:如果要格式化报文或从一个大的文本文件中抽取数据包,那么awk可以完成这些任务。
awk是shell过滤工具,之所以要在shell中使用awk是因为awk本身是学习的好例子,但结合与其他工具诸如grep和sed,将会使shell编程更加容易。
简言之,功能就是过滤和提取,通过对源文件读取内容,然后进行过滤,提取用户感兴趣的字段
源文件必须满足如下条件才可被awk过滤和提取内容:
源文件中内容要满足每个都有分隔符,且是相同的分隔符。
如:1.2 2.3 3.4这就满足条件,分隔符为' . '
有三种方式调用AWK。
第一种是命令行方式:
awk [-F field-separator] 'commands' input-file(s)
第二种方法是将所有awk命令插入一个文件,并使 awk程序可执行,然后用awk命令解释 器作为脚本的首行,以便通过键入脚本名称来调用它。
第三种方式是将所有的awk命令插入一个单独文件,然后调用:
awk -f awk-script-file input-files(s)
-f 选项指明在文件 awk _script _ file中的awk脚本,input _ file( s )是使用awk进行浏览的文件名。
示例:
获源文件中的整数部分,通过下面圈红的命令实现,其中print:打印 ,'{}' awk的命令,file是源文件,‘>’ 是重定向,新创建newfile文件将内容输入到该文件内,如果不写就是打印到屏幕上。而$1就是文件的第一列。
若要获取小数部分,通过$2得到:
获取下面标红的第一行
可以用管道grep结合awk进行筛选,其中间隔符是空格,因此直接不写.F,-v 取反 不要XXX的意思。
或者用这种方式,第1列必须是ubantu,对其筛选,$0是打印一整行,然后筛选第8行是sleep,进行如下筛选也可以:
简言之就是对文件进行读取数据和编辑
sed从文件的一个文本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位行号编辑它。重复此过程直到命令结束。
修改的是拷贝,源文件未发生变化
调用sed有三种方式:
使用sed命令行格式为:
sed [选项] sed命令 输入文件
在命令行使用sed命令时,实际命令要加单引号。sed也允许加双引号。
使用sed脚本文件,格式为:
sed [选项] -f sed脚本文件 输入文件
要使用第一行具有s e d命令解释器的s e d脚本文件,其格式为:
sed 脚本文件 [选项] 输入文件
不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件,sed从标准输入中接受输入,一般是键盘或重定向结果。
sed选项如下:
基本sed编辑命令如下:
示例:
在第二行内添加3.3
附加数据:附加到第二行后面
删除第二行
打印第二行、第三行,加上-n是不对源文件进行打印
sort命令将许多不同的域按不同的列顺序分类。
sort -cmu -o output_file [other options] +pos1 +pos2 input_files
最基本的sort方式为sort filename,按第一域进行分类(分类键 0)。实际上读文件时sort操作将行中各域进行比较,如下所示:
sort分类求逆
如果要逆向sort结果,使用- r选项。在通读大的注册文件时,使用逆向sort很方便。
唯一性分类
有时,原文件中有重复行,这时可以使用 - u选项进行唯一性(不重复)分类以去除重复行。对带重复行的文件使用- u选项去除重复行,不必加其他选项,sort会自动处理。
如下所示,对文件逆序+去重: