3

Мне нужно получить последние 10 миллионов строк из файла 100 миллионов строк.

tail -n 10000000 $in_file>$out_file

однако вышеприведенная команда заняла более 1 дня и все еще выполняется. Думаю, я могу использовать команду nice, чтобы назначить больший приоритет процессу, но я хочу знать, есть ли принципиально лучший способ.

1 ответ1

3

Помимо разбиения файла на несколько более мелких файлов, вы можете просто открыть файл и искать его в том, что вам может показаться ближе к концу файла.

После этого вы читаете столько строк, сколько может прийти, и, если вы достигнете EOF без всех ваших 10000000 желаемых строк, вам просто нужно сделать diff из первой позиции, которую вы догадались, и новую - предыдущую - позицию. и попробуйте прочитать строки n = diff .

На самом деле я не знаю, делает ли это tail , или есть какой-нибудь доступный инструмент POSIX, который выполняет такую операцию; Реализация этого не должна занять более пяти минут, я думаю (:Это может помочь.

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