命令行下文档处理工具:Pandoc、qsv、doxx

对于高级程序员而言,命令行才是最酷的存在,除非万不得已,才会考虑使用GUI或IDE。

本文汇总几款命令行下文档处理工具。

Pandoc

官网,使用Haskell语言编写、开源(GitHub,40.6K Star,3.7K Fork)基于命令行的通用文档转换器。

支持几十种文件格式的转换,各种调整细节的选项也不计其数,除基础的文档转换功能外,还能通过Lua、Python等脚本语言实现高度自定义的文档转换,成为其他很多现代文档工具的依赖,如R MarkdownQuarto官方PDF使用手册,多达172页,更新也很及时和频繁。

实战

支持多种安装方式

shell 复制代码
# Windows
choco install pandoc
# Mac
brew install pandoc
# Linux
sudo apt-get install pandoc

不擅长命令行的,可从GitHub Release页面下载安装包,以Windows平台为例:

推荐下载zip包免安装版,解压缩即可用:

加入系统环境变量PATH即可,检查pandoc --version是否可用。

命令行使用:

bash 复制代码
pandoc -f markdown input.txt -t html -o output.html

解读:

  • -f等价于--from-r--read,用于指定输入文件的格式;
  • -t等价于--to-w--write,用于指定输出文件格式;
  • -o等价于--output,用于指定输出文件名。

输入或输出的文件格式不是必须的,可根据文件扩展名推测出文件格式;如果输入文件没有扩展名,默认是Markdown;如果输出文件没有扩展名,默认是HTML。

如果没有指定输入文件,Pandoc会从stdin读入,如果没有指定输出文件,则输出为stdout,也就是直接显示在终端中;可和其他Linux命令结合使用管道符。

默认设置行宽为72,--wrap=preserve表示不换行,保持原样。

其他命令行:

bash 复制代码
# CSV转换成markdown
pandoc -f csv tips.csv -o tips.md
pandoc arma_acf.png -o aa.pdf
pandoc arma_acf.png --pdf-engine=xelatex -o aa.pdf

遇到的问题:

CSV转换到markdown,没有分割线|

转换PDF失败:

参考LaTeX安装与配置,下载得到basic-miktex-24.1-x64.exe,双击安装,自动追加D:\Program\MiKTeX\miktex\bin\x64\PATH系统变量。

重试弹窗如下:

点击更改:

安装好多个宏包后,还是出错

重试pandoc arma_acf.png --pdf-engine=xelatex -o aa.pdf,也是安装各种宏包,最后还是失败。

换个md文件:pandoc LangChain.md --pdf-engine=xelatex -o aa.pdf,PDF是生成成功,但忽略掉中文:

分析:xelatex选择的默认字体不支持中文字符,追添字体设置参数-V CJKmainfont="SimSun",并再次对文件进行编译。

重试命令pandoc LangChain.md --pdf-engine=xelatex -V CJKmainfont="SimSun" -o aa.pdf,终于成功:

注意:执行命令时,PDF文件不能是打开模式,否则出现上面pandoc.exe: aa.pdf: withBinaryFile: permission denied (Permission denied)报错。

Pandoc's Markdown

标准Markdown有不少局限性,导致Markdown方言层出不穷。

主要包括以下扩展语法:

  • 表格:简单表格、多行表格、网格表、管道表格
  • 列表:多种多样的有序列表和无序列表
  • 行块:以|开头,可用于诗歌等特殊文体的排版
  • 脚注:包括常规脚注和行内脚注
  • 文献引用:支持BibTeX等多种引文格式
  • 数学公式:用$$$包裹数学公式
  • 支持混合使用LaTeX和HTML语法

CommonMark

一套针对标准Markdown语法进行严格定义并与之高度兼容的规范。

PanWriter

官网,开源(GitHub,1.2K Star,59 Fork)跨平台基于Pandoc的Markdown编辑器,通过GUI的方式实现Pandoc部分文档转换功能。

qsv

官网,开源(GitHub,3.3K Star,94 Fork)、基于Rust、跨平台、命令行下的高性能的表格数据(CSV、Excel、TSV等)处理工具,提供数据查询、切片、索引、分析、过滤、转换、排序、验证、连接、格式化等功能。在线体验官方文档

一个为现代数据工作流打造的高效命令行数据处理工具,尤其适合大型结构化的表格数据处理,它完美地填补简单文本处理工具(如grepawk)和重型编程语言(如Python、R)之间的空白。

功能特性:

  • 超高性能:使用Rust和Polars编写,能够充分利用现代CPU的并行处理能力、索引、缓存以及流式处理等优化方式,对于大型文件(GB甚至更大)的处理速度通常远超传统脚本(如pandas)或其他命令行工具(如awksed);
  • 功能丰富:超过50个数据处理命令,包括apply、cat、count、datefmt、diff、edit、excel、explode、fetch、foreach、join、json、luau、pivotp、select、slice、sort、sqlp、to、transpose等;
  • 简单易用:采用逻辑清晰的子命令结构和详细的帮助文档。命令qsv count data.csv用于统计行数。qsv Pro版本提供图形化的操作界面,适合非技术人员;
  • 工作流管道:可将多个命令或者操作系统命令组合使用,构建复杂的数据处理流程。例如,命令qsv stats data.csv | qsv table用于分析每列的统计信息(数据类型、最大值、最小值、标准差等),并且以整齐的表格形式进行展示;

实战

从官网下载,实际上还是去GitHub Release页面下载,以Windows为例:

怎么选?

GNU和MSVC是Windows系统下两种不同的构建工具链(编译环境)产生的版本,区别主要在于:

  • GNU版本(对应-gnu.zip
    • 使用MinGW/GCC编译器,依赖MSYS2/MinGW运行时库,与Linux工具链更相似
    • 通常文件体积稍小,兼容性较好,尤其是旧系统
  • MSVC版本(对应-msvc.zip
    • 使用Microsoft Visual Studio C++编译器,依赖Microsoft Visual C++运行时库
    • 与Windows原生开发环境集成更好,性能可能略有优势(特别是涉及SIMD时)

本文下载GNU版本,解压缩,得到:

添加到PATH环境变量,然后在任何目录都能使用。10.0.0版本提供多达63个子命令,限于篇幅,并未完全列出来:

bash 复制代码
qsv --list
Installed commands (63):
	apply		Apply series of transformations to a column
	behead		Drop header from CSV file
	cat			Concatenate by row or column
	count		Count records
	datefmt		Format date/datetime strings
	dedup		Remove redundant rows
	describegpt	Infer extended metadata using a LLM
	diff		Find the difference between two CSVs
	edit		Replace a cell's value specified by row and column
	enum		Add a new column enumerating CSV lines
	excel		Exports an Excel sheet to a CSV

当然也提供命令行安装方式:

bash 复制代码
# Windows
scoop install qsv
# Mac
brew install qsv
sudo port install qsv
# Linux
sudo apt install qsv

命令行使用:

bash 复制代码
# 展示标题名
qsv headers news.csv
# 统计行数,含标题
qsv count news.csv
# 输出
qsv table iris.csv
# 不展示标题
qsv behead iris.csv
# CSV转换成JSONL
qsv tojsonl iris.csv
# 文件对比
qsv diff iris.csv iris-test.csv
# 检查是否已排序
qsv sortcheck iris.csv
# 排序后输出
qsv sort iris.csv
# 倒序输出,先输出最后一行,最后输出第二行
qsv reverse tips.csv
# SQL查询,from后的表名需和文件名一致
qsv sqlp tips.csv 'select * from tips order by total_bill desc'
# 以$$包含字段值
qsv sqlp tips.csv 'select * from tips where sex = $$Male$$'

遇到的问题:

对于.xlsx格式的支持。

对JSONL不熟悉的请参考:JSON衍生

doxx

开源(GitHub,3.3K Star,75 Fork)基于Rust语言开发,可实现在终端里查看Word文档。官方文档

特性:

  • 终端原生Word查看体验:与传统Office软件相比,非常轻量启动速度极快,30MB文档仅需50毫秒打开;能很好地保持文档原有格式,如标题、段落、列表、表格。
  • 智能表格渲染技术:自动识别表格中的数据类型,智能对齐即使在黑色终端背景下也能保持清晰的可读性。表格边框是使用Unicode字符精心绘制,自行缩放边框样式,在不同尺寸终端窗口也能正常显示。
  • 高效的搜索和导航功能:
    • 全文搜索:按s键进入搜索模式,支持正则表达式匹配,搜索结果会实时高亮显示,并提供上下文信息;
    • 大纲视图:按o键可以切换到文档大纲模式,显示完整的标题层级结构,快速定位到感兴趣的章节;
    • 复制功能:按c键可以将当前视图的内容复制到系统剪贴板,在不同视图模式下会复制相应的内容格式。
  • 多格式导出能力:具备强大的格式转换功能,支持markdown、CSV、JSON、纯文本(可与grepawk等命令行配合使用):doxx document.docx --export csv

实战

安装:

bash 复制代码
# 二进制安装
curl-L https://github.com/bgreenwell/doxx/releases/latest/download/doxx-$(uname -s)-$(uname -m).tar.gz | tar xz
sudomv doxx /usr/local/bin/
# 源码安装
git clone https://github.com/bgreenwell/doxx.git
cd doxx
cargo install --path .
doxx --version

参考

相关推荐
寺中人20 小时前
AutoCAD 2016
工具·设计·制作·autocad 2016
Slow菜鸟1 天前
通用模块工具箱(开箱即用版)
工具
私人珍藏库1 天前
[Windows] 隐写者 SteganographierGUI 1.3.8
windows·pc·工具·软件
seven_7678230981 天前
MateChat MCP(模型上下文协议)深入剖析:从协议原理到自定义工具实战
工具·devui·mcp·matechat
私人珍藏库2 天前
[Android] 轻小说文库(1.23)
android·app·安卓·工具
xixixi777772 天前
了解一个开源日志平台——Elastic Stack
网络·安全·日志·工具
bin91533 天前
当AI化身Git管家:初级C++开发者的版本控制焦虑与创意逆袭——老码农的幽默生存指南
c++·人工智能·git·工具·ai工具
路人甲ing..6 天前
blender常用快捷键和BlenderKit使用
教程·blender·工具·快捷键·光学
sean90812 天前
git filter-repo(优秀的 git repo 历史重写工具) 实战
git·repo·工具