文章目录

  • 安装
  • 介绍
  • 功能
  • 使用
  • 例子
  • 猜你喜欢
  • 写在后面

内容主要来自csvkt官方中文介绍 https://bioinf.shenwei.me/csvtk/chinese/。有改动,内容有增加

如同生物信息领域中的FASTA/Q格式一样,CSV/TSV作为计算机、数据科学和生物信息的基本格式,应用非常广泛。常用的处理软件包括:

  1. 以微软Excel为代表的电子表格软件
  2. Notepad++/SublimeText等文本编辑器
  3. sed/awk/cut等Shell命令
  4. 各种编程语言的数据处理库。

然而,电子表格软件和文本编辑器固然强大,但依赖鼠标操作,不适合批量处理;sed/awk/cut等Shell命令主要用于通用的表格数据,不适合含有标题行的CSV格式为了一个小操作写Python/R脚本也有点小题大作,且难以复用

开发csvtk前现有的工具主要是Python写的csvkit,Rust写的xsv,C语言写的miller,都各有优劣。作者沈伟之前刚开发完seqkit,投文章过程中时间充足,便想趁热再造一个轮子。

所以我决定写一个命令行工具来满足CSV/TSV格式的常见操作,这就是csvtk了。

安装

支持Windows/Mac/Linux的32和64位系统。用户根据自己的系统自取。

最新版发布页面:https://github.com/shenwei356/csvtk/releases

Linux 64位Ubuntu为例

# 下载,大小为7.46M
wget https://github.com/shenwei356/csvtk/releases/download/v0.19.1/csvtk_linux_amd64.tar.gz
# 解压后为16M
tar xvzf csvtk_linux_amd64.tar.gz
# 添加环境变量自己用,Ubuntu默认~/bin为环境变量
mkdir -p $HOME/bin/; cp csvtk $HOME/bin/
# 添加系统变量给所有人用 (可选)
sudo cp csvtk /usr/local/bin/# Conda安装(依赖关系检查可能要好久)
conda install -c bioconda csvtk

Windows 64位版

https://github.com/shenwei356/csvtk/releases/download/v0.19.1/csvtk_windows_amd64.exe.tar.gz

Mac 64位版 https://github.com/shenwei356/csvtk/releases/download/v0.19.1/csvtk_darwin_amd64.tar.gz

介绍

基本信息

  • 工具类型: 命令行工具,子命令结构
  • 支持格式: CSV/TSV, plain/gzip-compressed
  • 编程语言: Go
  • 支持平台: Linux, OS X, Windows 等
  • 发布方式: 单一可执行二进制文件,下载即用
  • 发布平台: Github, Bioconda
  • 项目主页: http://bioinf.shenwei.me/csvtk/
  • 开源地址: https://github.com/shenwei356/csvtk

特性

  • 跨平台
  • 轻量,无任何依赖,无需编译、配置,下载即用
  • 快速
  • 支持stdin和gzip压缩的输入和输出文件,便于流处理
  • 27个子命令提供多种实用的功能,且能通过命令行管道组合
  • 支持Bash自动补全
  • 支持简单的绘图

功能

在开发csvtk之前的两三年间,我已经写了几个可以复用的Python/Perl脚本(https://github.com/shenwei356/datakit) ,包括csv2tab、csvtk_grep、csv_join、csv_melt,intersection,unique。所以我的计划是首先集成这些已有的功能,随后根据需求进行扩展。

到目前为止,csvtk已有27个子命令,分为以下几大类:

  • 信息

    • headers 直观打印标题行(操作列数较多的CSV前使用最佳
    • stats 基本统计
    • stats2 对选定的数值列进行基本统计
  • 格式转化
    • pretty 转为美观、可读性强的格式(最常用命令之一
    • csv2tab 转CSV为制表符分割格式(TSV)
    • tab2csv 转TSV为CSV
    • space2tab 转空格分割格式为TSV
    • transpose 转置CSV/TSV
    • csv2md 转CSV/TSV为makrdown格式(写文档常用
  • 集合操作
    • head 打印前N条记录
    • sample 按比例随机采样
    • cut 选择特定列,支持按列或列名进行基本选择、范围选择、模糊选择、负向选择最常用命令之一,非常强大
    • uniq 无须排序,返回按指定(多)列作为key的唯一记录(好绕。。)
    • freq 按指定(多)列进行计数(常用
    • inter 多个文件间的交集
    • grep 指定(多)列为Key进行搜索(最常用命令之一,可按指定列搜索
    • filter 按指定(多)列的数值进行过滤
    • filter2 用类似awk的数值/表达式,按指定(多)列的数值进行滤
    • join 合并多个文件(常用
  • 编辑
    • rename 直接重命名指定(多)列名(简单而实用
    • rename2 以正则表达式重命名指定(多)列名(简单而实用
    • replace 以正则表达式对指定(多)列进行替换编辑(最常用命令之一,可按指定列编辑
    • mutate 以正则表达式基于已有列创建新的一列(常用于生成多列测试数据
    • mutate2 用类似awk的数值/表达式,以正则表达式基于已有(多)列创建新的一列(常用
    • gather 类似于R里面tidyr包的gather方法
  • 排序
    • sort 按指定(多)列进行排序
  • 绘图
    • plot 基本绘图

      • plot hist histogram
      • plot box boxplot
      • plot line line plot and scatter plot
  • 其它
    • version 版本信息和检查新版本
    • genautocomplete 生成支持Bash自动补全的配置文件,重启Terminal生效。

使用

  1. 输入数据要求每行的列数一致,空行也会报错
  2. csvtk默认输入数据含有标题行,如没有请开启全局参数-H
  3. csvtk默认输入数据为CSV格式,如为TSV请开启全局参数-t
  4. 输入数据列名最好唯一无重复
  5. 如果TSV中存在双引号"",请开启全局参数-l
  6. csvtk默认以#开始的为注释行,若标题行含#,请给全局参数-C指定另一个不常见的字符(如$

例子

仅提供少量例子,更多例子请看使用手册 http://bioinf.shenwei.me/csvtk/usage/ 。

源代码:https://github.com/shenwei356/csvtk/

下载软件和测序数据

git clone git@github.com:shenwei356/csvtk.git
cd csvtk/testdata/

注意:

  • 有些测序数据可能不在testdata中,可以自行根据下面页面显示内容保存;
  • 软件默认为csv,使用-t参数改为tsv
  • 命令后面可接输入文件,作者用cat inputfile 格式使命令中无输入文件,从 | 管道符读取数据,代码阅读更清楚
  1. 示例数据

     # 查看一个逗号分隔的名单示例文件$ cat names.csvid,first_name,last_name,username11,"Rob","Pike",rob2,Ken,Thompson,ken4,"Robert","Griesemer","gri"1,"Robert","Thompson","abc"NA,"Robert","Abel","123"
    
  2. 增强可读性

     # 格式化结果按列对齐,补空格$ cat names.csv  | csvtk prettyid   first_name   last_name   username11   Rob          Pike        rob2    Ken          Thompson    ken4    Robert       Griesemer   gri1    Robert       Thompson    abcNA   Robert       Abel        123
    
  3. 转为markdown,写博客、公众号超级有用

     $ cat names.csv | csvtk csv2mdid |first_name|last_name|username:--|:---------|:--------|:-------11 |Rob       |Pike     |rob2  |Ken       |Thompson |ken4  |Robert    |Griesemer|gri1  |Robert    |Thompson |abcNA |Robert    |Abel     |123
    

    效果

    id first_name last_name username
    11 Rob Pike rob
    2 Ken Thompson ken
    4 Robert Griesemer gri
    1 Robert Thompson abc
    NA Robert Abel 123
  4. 列位置或列名来选择指定列,可改变列的顺序

     # 按列位置选择并可设置顺序$ cat names.csv | csvtk cut -f 3,1 | csvtk pretty# 按列名选择并可重排序列$ cat names.csv | csvtk cut -f last_name,id | csvtk prettylast_name   idPike        11Thompson    2Griesemer   4Thompson    1Abel        NA
    
  5. 通配符选择多列

     # 匹配内容可不可引号,有引号阅读更方便# *代表包括任意,多选择可用逗号,并行$ cat names.csv | csvtk cut -F -f '*name,id' | csvtk prettyfirst_name   last_name   username   idRob          Pike        rob        11Ken          Thompson    ken        2Robert       Griesemer   gri        4Robert       Thompson    abc        1Robert       Abel        123        NA
    
  6. 删除第2,3列(下列第二种方法是选定范围,但-3在前,-2在后

     # 指定列号$ cat names.csv | csvtk cut -f -2,-3 | csvtk pretty# 指定列范围$ cat names.csv | csvtk cut -f -3--2 | csvtk pretty# 指定列名$ cat names.csv | csvtk cut -f -first_name,-last_name | csvtk prettyid   username11   rob2    ken4    gri1    abcNA   123
    
  7. 按指定列搜索,默认精确匹配

     # -f指定id列,-p指定模式,默认匹配单元格,匹配1,不会匹配11。模糊可用通配符$ cat names.csv | csvtk grep -f id -p 1 | csvtk prettyid   first_name   last_name   username1    Robert       Thompson    abc
    
  8. 模糊搜索(正则表达式)

     # -r开启模糊匹配,只要包含即可$ cat names.csv | csvtk grep -f id -p 1 -r | csvtk prettyid   first_name   last_name   username11   Rob          Pike        rob1    Robert       Thompson    abc
    
  9. 用文件作为模式来源

     # 经常需要配置多个值,按列表数据筛选很方便$ cat names.csv | csvtk grep -f id -P id-files.txt
    
  10. 对指定列做简单替换

     # 支持正则的替换,匹配内容保存为$1,再修饰$ cat names.csv | csvtk replace -f id -p '(\d+)' -r 'ID: $1' | csvtk prettyid       first_name   last_name   usernameID: 11   Rob          Pike        robID: 2    Ken          Thompson    kenID: 4    Robert       Griesemer   griID: 1    Robert       Thompson    abcNA       Robert       Abel        123
    
  11. 用key-value文件来替换(seqkit和brename都支持类似操作)

     # 指定列表的替换$ cat data.tsvname    idA       ID001B       ID002C       ID004$ cat alias.tsv001     Tom002     Bob003     Jim# nr代表行号,kv代表将匹配的$1替换为-k文件中第2列$ csvtk replace -t -f 2 -p "ID(.+)" -r "N: {nr}, alias: {kv}" -k alias.tsv data.tsvname    idA       N: 1, alias: TomB       N: 2, alias: BobC       N: 3, alias: 004
    
  12. 合并表格,需要分别指定各文件中的key列:默认均为第一列;若列(名)相同提供一个;若不同用分号分割

     $ cat phones.csvusername,phonegri,11111rob,12345ken,22222shenwei,999999# 按名合并,包括不匹配的值$ csvtk join -f 'username;username' --keep-unmatched names.csv phones.csv | csvtk prettyid   first_name   last_name   username   phone11   Rob          Pike        rob        123452    Ken          Thompson    ken        222224    Robert       Griesemer   gri        111111    Robert       Thompson    abcNA   Robert       Abel        123
    

以上的内容是否能加速你的分析工作。

扩展阅读:

Usage and Examples https://bioinf.shenwei.me/csvtk/usage/
英文使用和示例,每个命令的使用实例

Tutorial https://bioinf.shenwei.me/csvtk/tutorial/ 具体应用教程,以OTU表为例

猜你喜欢

  • 10000+: 菌群分析
    宝宝与猫狗 提DNA发Nature 实验分析谁对结果影响大 Cell微生物专刊 肠道指挥大脑
  • 系列教程:微生物组入门 Biostar 微生物组 宏基因组
  • 专业技能:生信宝典 学术图表 高分文章 不可或缺的人
  • 一文读懂:宏基因组 寄生虫益处 进化树
  • 必备技能:提问 搜索 Endnote
  • 文献阅读 热心肠 SemanticScholar Geenmedical
  • 扩增子分析:图表解读 分析流程 统计绘图
  • 16S功能预测 PICRUSt FAPROTAX Bugbase Tax4Fun
  • 在线工具:16S预测培养基 生信绘图
  • 科研经验:云笔记 云协作 公众号
  • 编程模板: Shell R Perl
  • 生物科普: 肠道细菌 人体上的生命 生命大跃进 细胞暗战 人体奥秘

写在后面

为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外5000+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍未解决群内讨论,问题不私聊,帮助同行。

学习扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

点击阅读原文,跳转最新文章目录阅读
https://mp.weixin.qq.com/s/5jQspEvH5_4Xmart22gjMA

csvtk:命令行下表格统计分析、数据筛选、替换、整理神器相关推荐

  1. 命令行下jq才是JSON 处理利器呀

    jq 简介 JSON 是一种轻量级的数据交换格式.其采用完全独立于语言的文本格式,具有方便人阅读和编写,同时也易于机器的解析和生成.这些特性决定了 JSON 格式越来越广泛的应用于现代的各种系统中.作 ...

  2. linux 命令行下导出查询的数据

    linux 命令行下导出查询的数据 因为业务要求只能在 linux 命令行下导出数据,所需需要此命令导出 mysql -uroot -p'password' mika_gxgd -e "SE ...

  3. 如何在Linux命令行下发送和接收UDP数据包

    众所周知,在传输层有两个常用的协议 TCP 和 UDP,本文介绍在 Linux 命令行下,如何使用 nc 命令发送或接收 UDP 数据包,这些命令的用法对调试 UDP 通信程序将有所帮助. 1. 问题 ...

  4. 中使用mysql连接失败_如何在命令行下使用 MySQL 连接数据库不用每次都输入密码?...

    点击上方☝SpringForAll社区 轻松关注! 及时获取有趣有料的技术文章 本文来源:http://rrd.me/g7J9e 我们知道在命令行下可以使用下面的命令连接 MySQL ,其中 xxx ...

  5. mysql登录密码特殊字符_mysql密码中有特殊字符在命令行下登录的操作

    使用MySQL过程中,我们经常会对一个字段进行排序查询,我们一般都是想要按照中文拼音首字母进行依次排序,但mysql中进行中文排序的时候,对汉字的排序结果往往都是错误的.这种情况 2021-02-04 ...

  6. 命令行下的FTP使用详解

    今天新到一台服务器,需要做一些环境配置拷入一些备份数据,在这台服务器上装FlashFxp又觉得麻烦,所以干脆用命令行吧 下面是简单的步骤及命令说明 假设有一目标FTP服务器,IP:123.123.12 ...

  7. mysql命令导入导出数据_mysql命令行导入和导出数据

    MySQL中导出CSV格式数据的SQL语句样本如下: select * from test_info into outfile '/tmp/test.csv' fields terminated by ...

  8. 使用命令行导出 SQL Server 数据层应用程序

    点击上方蓝字关注"汪宇杰博客" 我们可以使用 SSMS 导出 SQL Server 数据库的数据层应用程序.我在本地机器上使用这种方法已经有好几年了.如果不知道什么是 DAC,您可 ...

  9. ubuntu命令行启动浏览器_Ubuntu 秘笈之命令行下管理浏览器书签

    所有的现代浏览器都提供了一些形式的管理工具,虽然它们严格上来讲功能较少.如果你已经厌倦了这些内置在浏览器中的主流工具,你或许想要寻找一个替代品.这里介绍 Buku:一个命令行下的书签管理器.它不仅可以 ...

最新文章

  1. 搜索引擎提交工具_钦州SEO优化_SEO工具常用的有哪些大盘点,做SEO优化不再累...
  2. 并发编程(CountDownLatch使用)
  3. bool类型未初始化的产生的奇怪现象
  4. linux系统让一个命令在后台运行,Linux——Linux后台运行命令详述
  5. [唐诗]189长相思-李白
  6. Vmware安装Centos7上网问题的解决
  7. 抽象工厂模式java_Java描述设计模式(04):抽象工厂模式
  8. cwntos使用不了php,centos系统不能使用yum命令怎么解决
  9. Android 创建与解析XML(三)—— Sax方式
  10. 一些web开发中常用的、做成cs文件的js代码 - 转帖来的
  11. Java开发实习(入职经历)
  12. 网站搜索引擎优化诊断
  13. 根据关系图非常简单的求出三种关系闭包(自反闭包、对称闭包、传递闭包)附练习题
  14. 【Python实例】获取今日零点的datetime
  15. accton 打开或关闭进程统计
  16. ES6新特性:解构、对象扩展、函数扩展、数组扩展、数值扩展
  17. 菜鸟教程,css小白入门
  18. 如何查看IE浏览器的版本
  19. PADS2.4使用日记 1 Router 差分对创建与布线
  20. Android 实现涂鸦笔效果

热门文章

  1. 利用PySpark进行迁移学习的多类图像分类
  2. 图解Istio原理和实践--云平台技术栈18
  3. 用Leangoo进行项目管理
  4. easyUI添加行操作
  5. SQL与NoSQL区别
  6. c++重载运算符_C/C++编程笔记:运算符重载丨重载C++中的New和Delete运算符
  7. 12CSS中的盒子模型
  8. MySQL中的常见子查询语句
  9. C++中的以任意字符分割字符串
  10. TSC打印机编程C#