处理csv (tsv) 的工具已经见过不少,如csvkit,xsv。而csvtk这个工具的一些子命令却能解决一些前者无法解决的痛点,这些痛点可能需要你自己写脚本。
软件版本:0.18.2
地址:https://github.com/shenwei356/csvtk
headers
1 | $ csvtk headers test.txt #显示文件打印标题行,-t参数可设定制表符分割,默认逗号分割 |
pretty csv2tab tab2csv space2tab transpose csv2md
1 | $ csvtk pretty test.txt #对csv更友好的展示 |
cut
1 | $ csvtk cut -f 1,3-4,7-8 test.txt #选取1,3到4,7到8列 |
uniq
1 | $ csvtk uniq -f 1 test.txt #最解决痛点的子命令,指定列进行删除重复数据,会保留第一个发现的数据 |
grep
1 | $ csvtk grep -f 1 -p 'name' test.txt #同uniq一样,grep也可以指定列去搜索(精确搜索) |
join
1 | $ csvtk join -f '1;1' test1.csv test2.csv #按照2个文件的第一列合并文件,等于-f '1' |
fliter filter2
1 | $ csvtk filter -f '9>1000' test.txt #过滤选择第9列大于1000的行 |
replace
1 | $ csvtk replace -f id -p '(\d+)' -r 'ID: $1' #将id列数据(\d+)换为'ID: \d+' |
rename
1 | csvtk rename -f 1,2 -n id1,id2 test.txt #将第1,2列的标题改为id1和id2 |
mutate2
1 | $ csvtk mutate2 -n test -e '$1+$2' test.txt #添加新列,-n 新列标题,-e 处理方式(awk模式) |
sort
1 | $ csvtk sort -k 2:n test.txt #-k 制定排序规则,2:n意义为按第二列排序,并认为数据为数字 |
summary
1 | $ csvtk summary -f f4:sum,f5:sum -i test.txt #统计第四五列数字总和,-i 忽略非数字列 |