#column #text #line #command-line-tool #awk #sed #fields

应用 excavate

从多列文本中挖掘字段的命令行工具

2 个不稳定版本

0.3.0 2023年1月12日
0.2.0 2023年1月12日

#11#sed

GPL-3.0-only

19KB
99

excavate

从多列文本中挖掘列的命令行工具。

excavate 是一个简单的程序,执行一项特定的任务,按行读取标准输入并获取并打印指定的列。这是一项可以通过一些更复杂的程序完成的任务,例如 awksed,但我的记忆力只有金鱼那么好,当我需要的时候,我永远无法记住它们的语法。我个人经常需要获取列,而很少需要任何需要这些工具提供丰富功能集的东西。这就是我创建这个高度专业化的、简单的、一技之长的程序的理由。

用法

excavate <COLUMNS>

<COLUMNS> 以逗号分隔的列表格式提供。每个项目可以是一个正整数,或格式为 "a-b" 的范围。至少必须指定一个列。列 ID 从 0 开始(第一列是 0,第二列是 1,等等)。范围 "a-b" 包括两端,其中 "a" 是低端,"b" 是高端。如果 "a" 大于 "b",则范围为空(不选择任何列)。

例如

字段 描述
0 选择第一列
0-2 选择前三列
0,3,5 选择第一列、第四列和第六列
0-3,5 选择前四列和第六列

例如

打印匹配 "bash" 的所有进程 ID

$ ps aux | grep bash 
henry     7308  0.0  0.0   8988  5652 pts/3    S+   12:03   0:00 bash
henry     7482  0.0  0.0   8988  5500 pts/4    S+   12:03   0:00 bash
henry     7656  0.0  0.0   8988  5540 pts/5    S+   12:03   0:00 bash
henry     8776  0.0  0.0   6564  2176 pts/1    S+   12:08   0:00 grep --color=auto bash

$ ps aux | grep bash | excavate 1
7308
7482
7656
8826

无论您的输入顺序如何,列都将始终按从低到高的顺序打印,即从左到右在表中,并且会忽略重复项。 excavate 1,2 等同于 excavate 2,1

如果一行没有足够的列,excavate 将忽略超出限制的任何字段。例如,运行 excavate 2,10 对输入 bob alice eve 得到 eve。用 bob alice 运行它将得到一个空行。输出始终具有与输入相同的行数,即使其中一些是空的。

安装

目前,该程序可以通过 cargo 安装

cargo install excavate

构建

excavate 只依赖 Rust,clapnom。没有外部依赖。克隆此存储库,然后运行

cargo build

依赖关系

~2-2.8MB
~53K SLoC