李雷廷的个人博客分享 http://blog.sciencenet.cn/u/llt001

博文

tabtk: 一个增强版的 cut 工具

已有 3402 次阅读 2016-8-16 11:15 |系统分类:科研笔记

在 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



https://blog.sciencenet.cn/blog-656335-996729.html

上一篇:Word 2016 for Mac 中行尾下划线不显示问题的解决方法
下一篇:douban.fm 音乐推荐系统原理的推测
收藏 IP: 218.2.227.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的精选博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-23 19:48

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部