1

У меня есть много файлов, содержащих записи данных, которые хранятся в виде ASCII-файлов с разделителями. Каждая запись представляет собой строку, содержащую числовые данные, причем некоторые столбцы являются целочисленными, а другие с плавающей точкой, например.

1 1  5711  4 22280.365035   75.917899   55.485326    4.0260    3.9460    1.7921   11.2400    0.0000    2.6735   54.7331   52.7375

Я хочу проанализировать эти данные на основе простых критериев (столбец 2 == 1, столбец 6> = 53.275 и т.д.) И вывести соответствующие записи в другой файл.

Каждый файл имеет размер ~ 1 ГБ, что соответствует ~ 9M записей. В настоящее время у меня есть некоторый код MATLAB, который проходит через него построчно, но это занимает много времени (~ 2 часа на файл). Единственная причина, по которой я использую MATLAB, заключается в том, что я буду обрабатывать данные позже.

Как я могу проанализировать / обработать это более эффективно? Стоит ли использовать для этого "правильный" язык, или я не вижу значительного увеличения скорости?

1 ответ1

0

Простой скрипт на Python, вероятно, будет быстрее, чем все, что вы можете сделать в bash. Например:

#!/usr/bin/python

with open("data") as data:
    with open("filtered", "w") as filtered:
        for row in data:
            values = row.split()
            if (int(values[1]) == 1) and (float(values[5]) >= 53.275):  # [1]
                filtered.write(row)

[1]: Индексирование начинается с нуля в python, поэтому values[1] и values[5] - это второй и шестой столбцы соответственно.

Невозможно правильно протестировать, не зная точно, как выглядят ваши данные и насколько они соответствуют вашему фильтру, но для пары быстро собранных примеров файлов я получаю следующие результаты:

data_1   1000000 rows       35 matching rows   1.5 seconds
data_2   1000000 rows   565722 matching rows   3.1 seconds

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .