хвост команды linux висит на большом файле, какова альтернатива? - PullRequest
1 голос
/ 21 марта 2012

tail -n 1217060 input.sql > /disk2/mysql_dump/output.sql
не записывает в выходной файл.Через пару дней это означает, что он все еще ищет n-ю строку?
Есть ли более эффективная альтернатива этому?

Ответы [ 5 ]

3 голосов
/ 21 марта 2012

вы можете использовать dd

dd if=input.sql of=output.sql skip=1217060 bs=1

должно работать. Предполагая ascii-кодирование, потому что в противном случае смещение может быть неправильным.

ОБНОВЛЕНИЕ: извините, я только что понял, что вы хотите получить последние 1217060 байт файла. тогда вы должны рассчитать смещение самостоятельно. du input.sql должен дать вам размер файла. Эта сумма минус 1217060 должна дать вам смещение skip, которое вы хотите использовать.

1 голос
/ 22 марта 2012

Разве нельзя разделить входные файлы на несколько файлов, прежде чем вы это сделаете? В какой-то момент даже tail займет некоторое время для обработки файла. Эта ссылка может быть чем-то, что вы можете попробовать.

0 голосов
/ 13 сентября 2017

Я столкнулся с той же проблемой, когда хотел разбить большой файл (6 666 206 строк) на 10 кусков примерно одинакового размера (исключая первую строку).Для первых девяти файлов я использовал такую ​​конструкцию:

head -n 670001 rather_big_file.csv | tail -n 670000 > chunk_1.csv
head -n 1340001 rather_big_file.csv | tail -n 670000 > chunk_2.csv
(...)
head -n 6030001 rather_big_file.csv | tail -n 670000 > chunk_9.csv

Для обработки каждого из них потребовалось несколько секунд.Но для 10-го файла я попробовал

tail -n 636205 > chunk_10.csv

, который не вернулся;как описано в исходной задаче.

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

head -n 6666206 rather_big_file.csv | tail -n 636205 > chunk_10.csv

и вернул желаемоефайл через несколько секунд.Я понятия не имею, почему это сработало, но это решило проблему!

0 голосов
/ 27 июня 2013

действительно нужно больше информации о том, почему вы делаете это ... но потенциально вы можете улучшить это, добавив и добавив только несколько последних строк файла, как если бы это был журнал, и добавьте новый материал в ваш выходной файл.

tail -f source.sql >> target.sql

Можете ли вы дать более подробную информацию? Вы используете cron в сочетании с этой командой? почему вы хотите прочитать, а затем сбросить столько данных? большинство баз данных имеют команду дампа ...

0 голосов
/ 21 марта 2012

Я не могу представить, что в этом есть что-то лучше, чем tail

...