【发布时间】:2013-02-24 19:42:57
【问题描述】:
我有一个制表符分隔的数据。我想使用 perl 处理这些数据。我是 perl 的新手,不知道如何解决。
这是示例表:我的原始文件几乎是 GB
gi|306963568|gb|GL429799.1|_1316857_1453052 13 1
gi|306963568|gb|GL429799.1|_1316857_1453052 14 1
gi|306963568|gb|GL429799.1|_1316857_1453052 15 1
gi|306963568|gb|GL429799.1|_1316857_1453052 16 1
gi|306963568|gb|GL429799.1|_1316857_1453052 17 1
gi|306963568|gb|GL429799.1|_1316857_1453052 360 1
gi|306963568|gb|GL429799.1|_1316857_1453052 361 1
gi|306963568|gb|GL429799.1|_1316857_1453052 362 1
gi|306963568|gb|GL429799.1|_1316857_1453052 363 1
gi|306963568|gb|GL429799.1|_1316857_1453052 364 1
gi|306963568|gb|GL429799.1|_1316857_1453052 365 1
gi|306963568|gb|GL429799.1|_1316857_1453052 366 1
gi|306963580|gb|GL429787.1|_4276355_4500645 38640 1
gi|306963580|gb|GL429787.1|_4276355_4500645 38641 1
gi|306963580|gb|GL429787.1|_4276355_4500645 38642 1
gi|306963580|gb|GL429787.1|_4276355_4500645 38643 1
gi|306963580|gb|GL429787.1|_4276355_4500645 38644 1
gi|306963580|gb|GL429787.1|_4276355_4500645 38645 1
我想得到输出 名称、起始值、结束值、平均值
gi|306963568|gb|GL429799.1|_1316857_1453052 13 17 1
gi|306963568|gb|GL429799.1|_1316857_1453052 360 366 1
gi|306963580|gb|GL429787.1|_4276355_4500645 38640 38645 1
如果有人能分享他们的智慧,那就太好了。
【问题讨论】:
-
使用
Text::CSV_XS。 CSV 是一种讨厌全人类的可怕讨厌的格式,请始终在您和 CSV 之间保留一个经过良好测试的解析库。 -
@muistooshort:制表符分隔的文件与 CSV 不同,并且几乎总是表现良好,因为没有尝试引用包含分隔符的字段:制表符在数据中根本无效。
-
@Borodin:无关紧要。即使它被称为 Text::CSV/CSV_XS,它也可以与制表符或管道分隔符一起使用。只需将
sep_char参数传递给构造函数即可。 -
这是制表符分隔的,不是制表符分隔的。
-
@Borodin 分隔和分隔总是不同的东西,这在解析和处理方面有所不同。仅仅因为有些人用错了词并不意味着他们是一样的。划界的意思是被包围;带引号的字符串是引号分隔的。如果您有类似“:a:b:c:”的内容,则以冒号分隔时为3个字段,以冒号分隔时为5个字段,以冒号结尾时为4个字段。明白为什么使用正确的词很重要?否则无法正确编程。
标签: perl