У меня есть текстовый файл с разделителями табуляции, который очень большой. Многие строки в файле имеют одинаковое значение для одного из столбцов в файле (назовем его столбцом k). Я хочу разделить этот файл на несколько файлов, помещая записи с тем же значением k в том же файле. Как я могу это сделать? Например:
a foo
1 bar
c foo
2 bar
d foo
следует разделить на файл "foo", содержащий записи "a foo" и "c foo" и "d foo" и файл с названием "bar", содержащий записи "1 bar" и "2 bar".
как это сделать в оболочке script или в Python?
спасибо.
Я не уверен, насколько он эффективен, но быстрый и простой способ - использовать способ перенаправления файлов в awk
:
awk '{ print >> $5 }' yourfile
Это добавит каждую строку (немодифицированную) в файл с именем column 5
. При необходимости отрегулируйте.
>>
если вы добавляете в существующий файл. Более «AWKish» - использовать оператор >
который создаст новый файл или перезапишет существующий при первой записи, но добавит при последующих записях во время того же вызова (если не вызывается close()
). Вот как я это сделаю: awk '{print > "/path/to/" $5 ".extension"}' yourfile
Это должно работать с вашей спецификацией
awk '{outFile=$2; print $0 > outFile}' BigManegyFile
Надеюсь, это поможет.
$0
так как это по умолчанию.
После запуска обеих версий вышеперечисленных команд awk (+ с ошибкой awk) и просмотра запроса на версию python я приступил к короткому и не особо трудному пути к написанию утилиты для простого разделения файлов на основе ключей.
Github repo: 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