根据列的值高效地将一个文件拆分成多个文件
我有一个用制表符分隔的文本文件,这个文件非常大。文件中的很多行在某一列(我们叫它第k列)上有相同的值。我想把这个文件分成多个文件,把相同k值的内容放在同一个文件里。请问我该怎么做呢?举个例子:
a foo
1 bar
c foo
2 bar
d foo
这个文件应该被分成一个叫“foo”的文件,里面包含“a foo”、“c foo”和“d foo”,还有一个叫“bar”的文件,里面包含“1 bar”和“2 bar”。
我可以用shell脚本或者Python来实现这个吗?
谢谢。
3 个回答
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
7
这应该按照你的要求正常工作。
awk '{outFile=$2; print $0 > outFile}' BigManegyFile
希望这对你有帮助。
8
我不太确定这样做有多高效,但一个简单快捷的方法是利用awk
中的文件重定向功能:
awk '{ print >> $5 }' yourfile
这样会把每一行(不做修改)添加到一个以第5
列的内容命名的文件里。你可以根据需要进行调整。