|
在 Linux 中处理 tab 分割的数据是日常任务之一,而 cut 是处理这类数据的常用工具。但随着使用经验的丰富,会发现有许多需求是 cut 或其它 Linux 内置的工具不易完成的,比如调整 tab 文件各列的顺序,或者计算某一列数据的最大值、最小值、和等。后者可以用 datamash 工具(参见之前的博文:GNU datamash),而前者可以用 awk 或 perl 写命令行代码完成,比如:
cat data.txt | awk '{print $2 "\t" \$1}' # 调整第一列第二列的顺序
cat data.txt | perl -alne 'print join chr 9, @F[2,0,1]' # 调整输出顺序为,第三列、第一列、第二列
cut 的用法为:
cat data.txt | cut -f 1,3 # 仅输出第一列、第三列,忽略其它列
cat data.txt | cut -f 3,1 # 结果同上
对比 cut 和 awk、perl的方法可以发现,cut 用法简单,但不能调整列的顺序,awk、perl 功能强大,但编码麻烦。基于这样的使用经验,就会期望可否改进 cut 的功能,让 cut 可以调整列的顺序。GNU是一个庞大且影响巨大的工程,去修改GNU 的 coreutils(包含 cut、cat等 Linux 基本命令的程序的合称)必然很麻烦,倒不如自己动手写一个新的工具。我想,这也许就是 tabtk 诞生的原因(tabtk 作者:Heng Li)。
tabtk 的目的就是实现如上所述的类似 cut 命令用法的,但支持调整列的顺序的功能。-r 参数用于实现调整列的顺序。
tabtk cut -rf 5,1-3,6 file.txt
具体的用法参见其 github 网页:https://github.com/lh3/tabtk
tabtk 是用 C 语言写成,性能会比较稳健。在 Mac OS 上安装也比较方便,可以用 brew 安装,即:
brew install homebrew/science/tabtk
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-20 07:47
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社