在Linux中将制表符分隔的文件转换为CSV的最快方法

我有一个制表符分隔的文件,其中包含超过2亿行。 在Linux中将其转换为CSV文件的最快方法是什么? 该文件的确包含多行标题信息,我需要将其删除,但是标题行数是已知的。 我已经看到有关sed和gawk的建议,但是我想知道是否存在“首选”选择。

为了澄清起见,此文件中没有嵌入的选项卡。

andrewj asked 2020-06-23T04:03:36Z

10个解决方案

73 votes

如果您担心嵌入式逗号,则需要使用稍微更智能的方法。 这是一个Python脚本,该脚本从stdin提取TSV行并将CSV行写入stdout:

import sys

import csv

tabin = csv.reader(sys.stdin, dialect=csv.excel_tab)

commaout = csv.writer(sys.stdout, dialect=csv.excel)

for row in tabin:

commaout.writerow(row)

从外壳运行它,如下所示:

python script.py < input.tsv > output.csv

Ignacio Vazquez-Abrams answered 2020-06-23T04:04:27Z

50 votes

如果您需要做的就是将所有制表符转换为逗号,则可能需要tr。

此处的空白是文字标签:

$ echo "hello world" | tr "\\t" ","

hello,world

当然,如果您在文件的字符串文字中嵌入了制表符,那么这也会错误地翻译它们。 但是嵌入的文字标签很少见。

Mark Rushakoff answered 2020-06-23T04:04:03Z

20 votes

perl -lpe 's/"/""/g; s/^|$/"/g; s/\t/","/g' < input.tab > output.csv

在这种情况下,Perl通常比sed,awk和Python更快。

pabs answered 2020-06-23T04:04:47Z

8 votes

如果要将整个tsv文件转换为csv文件,请执行以下操作:

$ cat data.tsv | cut -f1,2,3 | tr "\\t" "," > data.csv

如果要省略一些字段:

$ cat data.tsv | cut -f1,2,3 | tr "\\t" "," > data.csv

上面的命令会将data.tsv文件转换为仅包含前三个字段的data.csv文件。

Gopal Kumar answered 2020-06-23T04:05:25Z

6 votes

sed -e 's/"/\\"/g' -e 's//","/g' -e 's/^/"/' -e 's/$/"/' infile > outfile

该死的批评家,引用一切,CSV不在乎。

是实际的制表符。 \ t对我没用。 在bash中,使用^ V进行输入。

Will Hartung answered 2020-06-23T04:05:49Z

5 votes

@ ignacio-vazquez-abrams的python解决方案很棒! 对于希望解析定界符其他标签的用户,该库实际上允许您设置任意定界符。 这是我处理管道分隔文件的修改版本:

import sys

import csv

pipein = csv.reader(sys.stdin, delimiter='|')

commaout = csv.writer(sys.stdout, dialect=csv.excel)

for row in pipein:

commaout.writerow(row)

jtlai answered 2020-06-23T04:06:10Z

3 votes

假设您不想更改标题并且假设您没有嵌入式选项卡

# cat file

header header header

one two three

$ awk 'NR>1{$1=$1}1' OFS="," file

header header header

one,two,three

NR> 1跳过第一个标头。 您提到您知道标题的行数,因此请根据您的情况使用正确的数字。 这样,您也无需调用任何其他外部命令。 只有一个awk命令可以完成这项工作。

如果您有空白列并且您对此很在意,则可以采用另一种方法。

awk 'NR>1{gsub("\t",",")}1' file

使用sed

sed '2,$y/\t/,/' file #skip 1 line header and translate (same as tr)

ghostdog74 answered 2020-06-23T04:06:43Z

1 votes

您也可以为此使用xsv

xsv input -d '\t' input.tsv > output.csv

在我对300MB tsv文件的测试中,它大约比python解决方案快5倍(2.5秒vs. 14秒)。

mloughran answered 2020-06-23T04:07:08Z

0 votes

以下awk oneliner支持引号+引号转义

printf "flop\tflap\"" | awk -F '\t' '{ gsub(/"/,"\"\"\"",$i); for(i = 1; i <= NF; i++) { printf "\"%s\"",$i; if( i < NF ) printf "," }; printf "\n" }'

"flop","flap""""

coderofsalvation answered 2020-06-23T04:07:32Z

-1 votes

我认为最好不要整理文件,因为在大文件的情况下可能会产生问题。 更好的方法可能是

$ tr ',' '\t' < csvfile.csv > tabdelimitedFile.txt

该命令将从csv file.csv获取输入,并将结果存储为以制表符分隔的File.txt中的制表符

Mian Asbat Ahmad answered 2020-06-23T04:08:01Z

linux用分割的csv文件读取,在Linux中将制表符分隔的文件转换为CSV的最快方法相关推荐

  1. linux 文件读取 监控,linux 文件系统的监控

    完整性检查是HIDS的重要组成部分之一,linux下做完整性检查的思路有3个 1.哈希对比 2.签名校验 3.inotify 方法有2个: A.定期检测,例如通过cron或程序内置计时器 B.实时检测 ...

  2. linux文件读取程序,Linux系统编程:文件的读取写入

    一.read系统调用 一旦有了与一个打开文件描述相关连的文件描述符,只要该文件是用O_RDONLY或O_RDWR标志打开的,就可以用read()系统调用从该文件中读取字节 函数原型: ssize_t ...

  3. c语言 文件读取z整行操作,C语言文件操作函数之ferror feof clearerr

    这些函数都是和文件读写时发生错误有关,下面一一分析: 1:ferror 原型:int ferror(FILE * fp) 作用:测试一个文件流是否被设置了错误标识符,如果是返回非 0 整数,否则返回 ...

  4. C语言文件读取错误怎么解决,c语言中文件随机读取出错如何解决

    在一个链表中找出相同的结点的算法与之相似,不过对于文件来说有点烦. 因为在C语言中对流式文件进行操作时,打开文件后,有一个读写位置指针,记录的是读写时在文件中的位置,其初始状态与打开方式有关.r.r+ ...

  5. 错误: 必须限制口令文件读取访问 jmxremote.password 有图示 文件访问权限问题配置

    错误: 必须限制口令文件读取访问 jmxremote.password can happen if the owner of jmxremote.password is not the same as ...

  6. python读取nc文件并转换成csv_Python提取netCDF数据并转换为csv文件

    netCDF全称是network Common Data Format(网络通用数据格式),是由美国大学大气研究协会(University Corporation for Atmospheric Re ...

  7. linux内核态加速文件读取,学习在kernel态下使用NEON对算法进行加速的方法

    本文跟着小编一起来学习在linux kernel态下如何使用NEON对算法进行加速的技巧,内容通过图文实例给大家做了详细分析,一起来看下. ARM处理器从cortex系列开始集成NEON处理单元,该单 ...

  8. php 制表符分隔csv,CSV(逗号分隔)、文本文件(制表符分隔) 等文件的读取

    简单的用EXCEL对照测试过 #include #include #include templatebool csvread( const char* filename, callbackfun cb ...

  9. python中文件读取_如何从Python中的文件读取字节

    类似于 this问题,我试图读取ID3v2标记头并且无法弄清楚如何在python中获取单个字节. 我首先将所有十个字节读入一个字符串.然后我想解析各个信息. 我可以在字符串中获取两个版本号字符,但后来 ...

最新文章

  1. 数据结构之队列、双端队列
  2. linux 挂载 nfs 权限,linux – 如何允许写入已挂载的NFS分区
  3. sscanf操作字符串和整型的区别
  4. Unity3D研究院之Inspector面板枚举的别名与排序
  5. 智能合约重构社会契约(9)Fabric
  6. 《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记
  7. 深度学习保姆级入门教程 -- 论文+代码+常用工具
  8. 解决: service endpoint with name xxx already exists
  9. 前台传JSON到后台
  10. Posix信号量操作函数
  11. TensorFlow实现去噪自编码器及使用—Masking Noise Auto Encoder
  12. (经典)详解WINDOWS映像劫持技术
  13. 开源加速器Gemmini代码解析(一):脉动阵列
  14. 使用Bochs写Hello world
  15. 快速搭建免费的个人网站
  16. 信息检索笔记(一):布尔检索
  17. My summery
  18. 控制性详细规划图纸成果及深度要求
  19. 洛谷-P1478-陶陶摘苹果(升级版)
  20. 电脑为什么无法更改计算机,电脑打不开更改电脑设置怎么办

热门文章

  1. 【智能制造】45张精炼PPT解读智能工厂建设与MES应用
  2. 争对让望对思野葛对山栀注解_笠翁对韵·上卷·四支在线阅读-翻译及赏析
  3. ESP8266+SH1106 OLED屏实现天气预报+温度显示+NTP时间同步6屏带中文显示V7.5版
  4. securefx 堡垒机_本网站服务器在美国维
  5. python练习之excel表格管理
  6. 计算机怎么设置搜索桌面,桌面记事本,教您如何在电脑桌面添加好用的便签!...
  7. 仿作小米官网-乞丐版
  8. 查询塑料塑胶材料属性参数的网站数据库
  9. 数据结构折半查找例题_数据结构查找习题及答案
  10. 墨尔本大学计算机科学硕士,墨尔本大学计算机专业硕士已经开放申请