эффективное разбиение одного файла на несколько файлов по значению столбца - PullRequest
1 голос
/ 15 марта 2011

У меня очень большой текстовый файл с разделителями табуляции. Многие строки в файле имеют одинаковое значение для одного из столбцов в файле (назовите его столбцом k). Я хочу разделить этот файл на несколько файлов, поместив записи с одинаковым значением k в один файл. Как я могу это сделать? Например:

a foo
1 bar
c foo
2 bar
d foo

следует разбить на файл «foo», содержащий записи «a foo» и «c foo» и «d foo», и файл с именем «bar», содержащий записи «1 bar» и «2 bar».

как я могу сделать это либо в сценарии оболочки, либо в Python?

спасибо.

Ответы [ 3 ]

8 голосов
/ 15 марта 2011

Я не уверен, насколько эффективен , но быстрый и простой способ - воспользоваться преимуществами перенаправления файлов в awk:

awk '{ print >> $5 }' yourfile

Это добавит каждую строку (без изменений) в файл с именем столбца 5. Отрегулируйте при необходимости.

7 голосов
/ 15 марта 2011

Это должно работать согласно вашей спецификации

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

Надеюсь, это поможет.

1 голос
/ 03 апреля 2015

После запуска обеих версий вышеупомянутых команд 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...