2012-10-17 25 views
2

我想剪切和粘贴在一起制表符分隔的文件,并使用从UNIX剪切和粘贴实用程序以这种方式被删除列:从分隔的文件

cut -f 1-66 file1 > file1a 
cut -f 68- file1 > file1b 
paste file1a file1b 

但是我在想,如果有一种方法可以在Perl/Ruby中使用-F命令来实现,因为从长远来看,这可能会更快。例如

perl -F/\\t/ -ane 
for every line in document 
    for i (0..66) and (67..Last field in line) 
    print $[i] 
    end 
    print \n 
end 
+0

最后一个元素的索引,你说'cut'重写从它的输入文件的输出?另外,假设多处理器环境下性能明智,2个平行切口通过管道输送粘贴应该非常快。祝你好运。 – shellter

回答

4

的Perl可以以这种方式工作:

perl -F/\\t/ -ane 'print join("\t", @F[0..66,68..$#F])' 

@F包含字符串的部分,$#F包含@F

+0

可爱的Perl单线程=) –

4

您的原始代码似乎缺少一些重定向。

如何:

cut -f1-66,68- input > output 

我认为这是不可能的,Perl或红宝石会比这更快。

+0

确实,'cut'更快。用于剪切的“real 0m0.002s”和用于Perl的“real 0m0.001s” –

+1

@sputnick注意这样的基准。最大的瓶颈可能是从磁盘读取。第一次运行可能会使大部分文件进入缓冲区,第二次运行不需要访问磁盘。 – Barmar