根据列的值高效地将一个文件拆分成多个文件

1 投票
3 回答
3482 浏览
提问于 2025-04-16 13:41

我有一个用制表符分隔的文本文件,这个文件非常大。文件中的很多行在某一列(我们叫它第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列的内容命名的文件里。你可以根据需要进行调整。

撰写回答