文本处理工具
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"
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 不满足你的要求,就可以借助数据库(数据库可不是只能用来存数据)。
主流的 Linux 发行版直接通过包管理器安装即可。