🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁
🦄 个人主页——libin9iOak的博客🎐
🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥
第九章 数据查找和筛选工具
学习目的
让学生了解流编辑器sed和报表生成器awk的简单使用。
学习要求
了解:流编辑器sed和报表生成器awk的简单使用。
**理解:**awk中的重定向
学习方法
本章主要讲述数据查找和筛选工具,需要学生上机实践,培养数据查找和筛选能力。
概念和原理
9.1 流编辑器sed
(1) 流编辑器
▪ 定义
流编辑器是一种流水线型的、非交互式的文本编辑器。它使用户可以在命令行上(而不是编辑器中)对文件进行无破坏性编辑。
▪ 工作流程
- sed 工作时,首先读取被编辑文件中的第一行文本,将其放入一个模式空间的临时缓冲区中。
- 再读取编辑命令,根据命令中指定的模式和行号来查找和编辑文本。
- 编辑完成后将结果输出到标准输出(缺省为荧光屏上)并读取下一行文本。
- 重复这个过程直到文本结束。
▪ 屏幕编辑器与流编辑器的区别
项目 | vi | sed |
1.用户操作方式 2.文本处理模式 3.编辑命令地点 4.编辑空间 5.对原文本影响 6.批量发出命令 7.基本编辑单位 8.主要应用场合 9.可编文件大小 | 交互式 全局并行(可逆行) 编辑器中 临时文件(文件缓存) 破坏性的 不能 字符 人工编辑 较小 | 非交互式 逐行串行(不可逆行) 命令行上 模式空间(行缓存) 非破坏性的 可以 行 程序自动编辑 较大 |
(2) sed命令的基本格式
▪ sed ‘command’ file
▪ sed -n ‘command’ file
▪ sed -e ‘command1’ -e ‘command2’ file
▪ sed -f cmd_file file
任选项说明:
command: 普通行编命令
-n: 只显示与模式匹配的行(缺省都显示)
-e: 在同一命令行上进行多次编辑
-f: 编辑命令放在随后的命令表文件中
file: 被编辑的文本文件
(3) sed中常用的行编辑命令格式
- [行定位符][编辑命令元字符]
例如: sed ‘1,9d’ abc
sed -n ‘196p’ abc
- /正则表达式/[编辑命令元字符]
例如: sed -n ‘/student/p’ filename
sed ‘/xyz/d’ filename
- [定位符][元字符]/正则表达式/[元字符]
例如: sed –n ‘3,8s/east/west/’ filename
sed –n ‘1,$s/computer/network/g’ filename
(4) sed中常见的出错信息和退出状态
- 操作系统命令出错:
sed -r ‘s/this/that/’ myfile
显示: sed: ERROR: Illegal option – r
退出状态值: 1
- 正则表达式出错和模式不匹配:
sed -n ‘s/this/that’ newfile
显示: sed: ERROR: Command garbled:
s/this/that
退出状态值: 0
- 出错信息保存和退出状态值检测
保存出错信息:
sed –n ‘1,$s/abc/xyz/’ file 2> err_log
或: sed –n ‘1,$s/abc/xyz/’ file 2>> err_log
(5) sed应用实例
- 打印文件内容: p命令
sed -n ‘22, 35p’ file1
打印file1的第22~35行
sed -n ‘/string/p’ file2
打印file2中包含string的行
sed -n ‘9, /^uestc/p’ file3
打印file3中第9行到以uestc开头的行
sed -n ‘/[Cc]hina/p’ file4
打印file4中包含China或china的行
- 删除文件内容: d命令
sed ‘76d’ file5
删除file5中的第76行
sed ‘9,$d’ file6
删除file6中第8行以后的所有行
sed ‘/co*ool/d’ file7
删除file7中包含cool, coool, cooool, ……等等的行
- 替换文件内容: s命令
sed -n ‘s/beijing/shanghai/g’ table1
将table1中所有的beijing替换为shanghai
sed -n ‘s/^ *uid/username/p’ ulist
将ulist中以零至多个空格开头后跟uid的字符串替换为username
- 多次编辑: e命令
sed -e ‘1,5d’ -e ‘s/good/bad/’ report
将report中的第1~5行删除, 同时将good替换为bad - 添加行: a命令
sed ‘/^operation/a\this is an inserted line’ file1
在文件file1中的以operation开头的行后加入this is an inserted line一行。
9.2 数据处理器awk
(1) 编辑工具awk
▪ 定义:
awk 是一种程序设计语言, 主要用来处理文本类数据并产生报表。
它执行时对输入数据(文件、标准输入或命令的输出)逐行进行扫描,匹配指定的模式,并执行指定的操作。
(2) awk的基本格式
awk ‘pattern {action}’ filename
awk扫描filename中的每一行, 对符合模式pattern的行执行操作action
(3) 数据文件中记录和域的标识
$1 $2 $3 $4 $5
NR=1 Tom Jones 4424 5/12/66 543354 NF=5
NR=2 Mary Adams 5436 11/4/63 28765 NF=5
NR=3 Sally Chang 1654 7/22/54 650000 NF=5
NR=4 Billy Black 1683 9/23/44 336500 NF=5
(4) 应用实例
$cat employees
Tom Jones 4424 5/12/66 543354
Mary Adams 5436 11/4/63 28765
Sally Chang 1654 7/22/54 650000
Billy Black 1683 9/23/44 336500
$awk ‘/Mary/’ employees
Mary Adams 5436 11/4/63 28765
$awk ‘{print $1}’ employees
Tom
Mary
Sally
Billy
$awk ‘/Sally/ {print $1, $2}’ employees
Sally Chang
9.3 awk的重定向
(1) awk的输入重定向形式
- 从其它命令输入
格式: command | awk ‘pattern’
command | awk ‘{action}’
command | awk ‘pattern {action}’
- 从标准输入设备(键盘)输入
格式: awk ‘pattern {action}’
由于未指定输入数据来源, 缺省情况下从标准输入设备(键盘)读取数据. 键盘上每输入一行, awk就处理一行, 直到遇到^D为止.
(2) awk的格式化输出
- print 函数
用于不需要复杂格式的简单输出。
- printf 函数
高级格式化输出函数. 用法与C语言中的用法相同。
(3) awk命令文件
格式:
awk -f awk_file data_file
▪ 当需要对输入数据中的一行执行多项操作时, 常把这些操作命令放在一个命令文件awk_file中, 而不是在命令行上发出.
▪ awk运行时, 对输入文件中的每一行执行命令文件中的所有操作后, 再对下一行数据进行同样的处理过程, 以此类推, 直到输入文件中的最后一行。
重点
流编辑器sed和报表生成器awk的简单使用。
难点
流编辑器sed和报表生成器awk的使用。
习题
1.屏幕编辑器和流编辑器的区别。
2.命令 sed -n ‘22, 35p’ file1 代表什么意思?
答:打印file1的第22~35行。
3.命令 sed -n ‘s/beijing/shanghai/g’ table1 代表什么意思?
答:将table1中所有的beijing替换为shanghai。
4.假如 employees的内容为:
Tom Jones 4424 5/12/66 543354
Mary Adams 5436 11/4/63 28765
Sally Chang 1654 7/22/54 650000
Billy Black 1683 9/23/44 336500
那么命令 $ awk ‘/Sally/ {print $1, $2}’ employees得到的结果是什么?
答:Sally Chang。
原创声明
=======
作者: [ libin9iOak ]
本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。
作者保证信息真实可靠,但不对准确性和完整性承担责任。
未经许可,禁止商业用途。
如有疑问或建议,请联系作者。
感谢您的支持与尊重。
点击
下方名片
,加入IT技术核心学习团队。一起探索科技的未来,共同成长。