文本处理工具

Table of Contents

最后更新日期:2022-06-19

本页面罗列了我平时最常用的文本处理工具,工具挑选的约定如下:

1、主要处理的输出是人类可读的纯文本,而不是二进制文件;

2、原则上,以命令行工具为主,为了高效和自动化;

3、这些工具可轻松获取到,开源或系统自带,并不包括商业软件。

1 常用 shell 命令

命令 用途
cat 查看文件所有的内容
less、more 分页读取文件内容
head 查看文件开头内容
tail 查看文件末尾内容
sort 排序文件内容
uniq 去重文件内容
wc 统计文件行数、字符数等

要知晓 less 与 more 命令的区别,两个命令都有滚屏翻页功能,但 more 不能往前翻页,less 可以。大文本用 more 会比 less 更快,因为 less 要支持上下翻页,就需要读取完所有内容后计算出行号。

sort 和 uniq 命令往往需要组合起来使用,先用 sort 排序,再用 uniq 去重,因为 uniq 只能去重相邻行的,如果要对整个文件做去重就需要先排序。

2 AWK、grep 和 sed

Linux 文本处理的三剑客,大多数发行办均默认自带,也是 shell 中处理文本必会的三个重要命令。

AWK 是一门完整的编程语言,但有多种实现,使用时一定要注意当前系统是哪个版本,常见的有 gawk 和 mawk,两者有一些区别,gawk 更为广泛。

3 goawk

兼容 GNU AWK,并在此基础上增加了读写 CSV 文件的特性。如今处理 CSV 数据的场景很常见,对于简单的 CSV 文件,用 GNU AWK 处理时可以指定逗号作为分割符:

awk -F, …

但对于复杂的文本内容,GNU AWK 就无能为力了,比如这样的文本:

1,"hello,world"

下载地址:https://github.com/benhoyt/goawk

4 jq

命令行解析 JSON 的工具。

官网:https://stedolan.github.io/jq/

美化 JSON 格式:

jq '.' file.json

获取全部键:

jq 'keys' file.json

获取全部值:

jq '.[]' file.json

获取某个键的值:

jq '.attack_total' file.json

索引:

jq '.attack_type["SQL 注入"]' file.json

过滤:

jq '.[] | select(.id == 100) or select(.id == 1000)' file.json

单行输出多字段:

jq -r '"\(.name), \(.blog)"' file.json

5 q

用 SQL 语句来处理文本,对于不熟悉 AWK 等工具的人来说,q 也是一个极为方便的工具。

下载地址:http://harelba.github.io/q/

示例 1,按列解析:

q 'select c9, count(1) from xx.log group by c9 order by count(1) desc'

示例 2,处理带 header 的 CSV 文件解析:

q -d, -H 'select 域名 from result.csv'

q 用 Python 开发的,因此在处理大文件时速度明显比 AWK 等工具慢。

6 SQLite

SQL 是门很好的数据分析语言,如果 q 不满足你的要求,就可以借助数据库(数据库可不是只能用来存数据)。

官网:https://www.sqlite.org

主流的 Linux 发行版直接通过包管理器安装即可。