通过列的值有效地将一个文件拆分为多个文件

时间:2011-03-14 22:04:02

标签: python shell unix

我有一个非常大的制表符分隔的文本文件。文件中的许多行对于文件中的一列具有相同的值(称为列k)。我想将此文件分成多个文件,将具有相同k值的条目放在同一个文件中。我怎样才能做到这一点?例如:

a foo
1 bar
c foo
2 bar
d foo
应将

分成包含条目“a foo”和“c foo”和“d foo”的文件“foo”以及包含条目“1 bar”和“2 bar”的名为“bar”的文件。 / p>

如何在shell脚本或Python中执行此操作?

感谢。

3 个答案:

答案 0 :(得分:8)

我不确定它是如何效率,但快速简便的方法是利用awk中文件重定向的工作方式:

awk '{ print >> $5 }' yourfile

这会将每行(未修改)附加到以5列命名的文件中。根据需要进行调整。

答案 1 :(得分:7)

这应该适用于您的规范

awk '{outFile=$2; print $0 > outFile}' BigManegyFile

希望这会有所帮助。

答案 2 :(得分:1)

在运行上述awk命令的两个版本(+出现awk错误)并看到python版本的请求之后,我开始了一个简短而不是特别艰苦的过程,编写一个实用程序来轻松地根据键分割文件。

Github回购:https://github.com/gstaubli/split_file_by_key

背景信息:http://garrens.com/blog/2015/04/02/split-file-by-keys/

Awk错误:

awk: 14 makes too many open files
 input record number 4555369, file part-r-00000
 source line number 1