3 个版本 (破坏性)
0.3.0 | 2019年5月2日 |
---|---|
0.2.0 | 2019年4月28日 |
0.1.0 | 2019年4月28日 |
#213 in 值格式化
17KB
133 行
x12pp
x12pp
是 X12 EDI 文件的 CLI 美化打印器。
X12 是一种复杂的格式,由一个固定长度的标题和一系列由段终止符字符分隔的段组成。
这些段通常不以换行符分隔,因此从文件中提取一系列行或使用常用的 Unix 工具箱查看开始部分会变得不必要地痛苦。
当然,您可以使用 sed --e 's/~/~\n/g'
分割行,继续您的日常事务,但
- 尽管
~
是传统且最广泛使用的段终止符,但它不是必需的 - 每个 X12 文件都指定了其自己的终止符作为标题的一部分。 - 使用
sed
或perl
意味着我没有机会探索 Rust 中的快速流处理。
所以我们在这里。
安装
Homebrew
$ brew tap clarkema/nomad
$ brew install x12pp
使用 cargo
$ cargo install x12pp
从源代码
x12pp 使用 Rust 编写,因此您需要安装最新的 Rust,才能从源代码构建它。结果是位于 target/release/x12pp
的静态编译二进制文件,您可以将它复制到您需要的任何地方。
$ git clone https://github.com/clarkema/x12pp
$ cd x12pp
$ cargo build --release
$ ./target/release/x12pp --version
使用方法
$ x12pp < FILE > NEWFILE
$ x12pp FILE -o NEWFILE
# Strip newlines out instead with:
$ x12pp --uglify FILE
请参阅手册页或 --help
以获取更多信息。
基准测试
所有测试都是在英特尔酷睿 i9-7940X 上进行的,使用位于 RAM 磁盘上的 1.3G X12 测试文件。在每种情况下,都使用了 shell 重定向,将文件通过测试命令管道到 /dev/null
,以便尽可能接近测量纯处理时间。例如
$time sed -e 's/~/~\n/g' <test-file>/dev/null
工具 | 命令 | 终止符检测 | 预包装? | SIGPIPE? | 时间 |
---|---|---|---|---|---|
x12pp | x12pp |
✓ | ✓ | ✓ | 1.3s |
GNU sed 4.7 | sed-e's'/~/~\n/g' |
✗ | ✗ | ✗ | 7.6s |
perl 5.28.2 | perl-pe's'/~[\r\n]*/~\n/g' |
✗ | ✓ 但较慢 | ✗ | 8.5s |
edicat | edicat |
✓ | ✓ | ✓ | 7m41s |
备注
- 'SIGPIPE' 指的是命令是否可以在不处理整个输入的情况下返回部分结果。创建
x12pp
之一的原因是能够在不遍历多个吉字节文件的情况下运行x12pp < FILE | head -n 100
。 - 当然,你可以编写一个 Perl 脚本,在处理文件其余部分之前正确地读取段终止符。
- Perl 可以使用已包装的输入数据产生正确的输出,但速度要慢得多;大约24秒,而8.5秒。
- 有关 edicat 的更多信息,请参阅 https://github.com/notpeter/edicat
依赖项
~0.8–1.3MB
~13K SLoC