我有一个非常大的制表符分隔的文本文件。文件中的许多行对于文件中的一列具有相同的值(称为列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中执行此操作?
感谢。
答案 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