awk
awk是一种程序语言,对文档资料的处理具有很强的功能。awk擅长从格式化报文或从一个大的文本文件中抽取数据。
awk的命令格式为:
- awk [-F filed-separator] “commands” input-file(s)
awk [-F filed-separator] “commands” input-file(s)
每一个命令(commands)都由两部分组成:一个模式(pattern)和一个相应的动作
(action)
- /pattern1/{action1}
- /pattern2/{action2}
- /pattern3/{action3}
/pattern1/{action1} /pattern2/{action2} /pattern3/{action3}
awk将一行文字按分隔符(filed-separator)分为多个域,依次记为$ 1,$ 2 . . . $ n。$0代表所有域值。因此awk更适合于以域为单位来处理文件。加之ARGIND等内置变量,使awk能处理多个文件。典型的应用为查找一个文件中的某个字段是否在另一个文件中出现。例子见我的另一篇博客【awk】诡异的错误,linux和windows换行的区别。但由于$0代表所有域,即整行,因此awk也有简单行处理能力。
sed
sed 是一个精简的、非交互式的编辑器。它能执行与编辑vi和emacs相同的编辑任务,但sed编辑器不提供交互使用方式,只能在命令行下输入编辑命令。
sed的命令格式为:
- sed [options] 'command' file(s)
- sed [options] -f scrīptfile file(s)
sed [options] 'command' file(s) sed [options] -f scrīptfile file(s)
作为编辑器,当然少不了插入(a/、i/)、删除(d)、查找替换(s)等命令。详见sed命令详解 。
总结
- 如果文件是格式化的,即由分隔符分为多个域的,优先使用awk
- awk适合按列(域)操作,sed适合按行操作
- awk适合对文件的抽取整理,sed适合对文件的编辑。
- (想到再补~)