awk
是一种强大的文本处理工具,常用于数据提取和报告生成。它以其简洁的语法和强大的功能在Linux和Unix系统中广泛使用。awk
的名字源自其发明者Alfred Aho、Peter Weinberger和Brian Kernighan的名字首字母。
sed
(Stream Editor)是一个流编辑器,用于对输入文本进行编辑和处理。它通常用于替换、删除、插入和格式化文本。
AWK
基本特性
- 模式匹配与处理: awk 可以根据模式(正则表达式)匹配文本行,并在匹配的行上执行指定的操作。
- 字段处理: 默认以空白字符(空格或制表符)分隔字段。用户可以自定义字段分隔符。
- 内置变量: 包括行号 NR、字段数 NF、每个字段 $1, $2, …, $n 和整行 $0 等。
- 格式化输出: 支持使用 printf 函数进行格式化输出。
常见用法
- 打印指定列:
awk '{ print $1, $3 }' file.txt
- 根据条件筛选:
awk '$2 > 50' file.txt
- 计算列的总和:
awk '{ sum += $3 } END { print sum }' file.txt
- 设置字段分隔符:
awk -F ':' '{ print $1, $3 }' file.txt
- 格式化输出:
awk '{ printf "%-10s %-10s\n", $1, $2 }' file.txt
SED
基本特性
- 流编辑: sed 处理文本流,可以对整个文件进行操作,而不会立即修改原始文件,除非使用 -i 选项。
- 命令集: 使用一系列编辑命令来处理文本,例如 s(替换)、d(删除)、i(插入)、a(追加)等。
- 正则表达式支持: 支持基本和扩展正则表达式用于模式匹配。
常见用法
- 替换文本:
sed 's/old/new/' file.txt # 将第一个匹配的 old 替换为 new。
- 替换所有匹配的文本:
sed 's/old/new/g' file.txt
- 删除行:
sed '3d' file.txt # 删除第3行。
sed '/pattern/d' file.txt # 删除匹配某模式的所有行
- 插入行:
sed '2i\New line of text' file.txt # 在第2行前插入 'New line of text'。
- 替换文件内容:
sed -i 's/old/new/g' file.txt # 直接在文件中替换内容(使用 -i 选项)。
- 打印指定行:
sed -n '2p' file.txt # 仅打印第2行。-n 选项禁止默认的打印行为,p 是打印命令
- 结合使用
sed 's/old/new/' file.txt | awk '{ print $1, $3 }'
比较和选择
- awk 是基于字段的处理工具,适用于处理结构化数据(例如表格)并进行复杂的计算和格式化。
- awk 支持复杂的文本处理、计算和格式化,具有类似编程语言的功能。
- 使用 awk 时,你需要处理结构化文本,按字段操作,或执行复杂的文本处理任务。
- sed 是基于行的编辑工具,适用于简单的行级操作和文本替换。
- sed 更专注于文本的逐行处理和编辑,功能相对简单但高效。
- 使用 sed 时,你需要执行简单的文本替换、删除或插入操作,尤其是当操作需要应用到整个文本流时。