3

У меня часто есть длительная работа, когда приложение читает большой файл (> 2 ГБ) и выполняет обработку каждой записи.

Есть ли какая-нибудь команда UNIX, которую я могу использовать, чтобы увидеть, насколько глубоко этот файл может быть? Приложение будет иметь только один дескриптор файла для входного файла.

3 ответа3

3

Попробуйте pv , Pipe Viewer

2

Я всегда задавался вопросом, говорит ли "смещение" lsof вам текущую позицию чтения дескриптора файла в файле, но документация не дает ясного объяснения, и я никогда не удосужился проверить или проверить свои предположения. http://www.netadmintools.com/html/lsof.man.html

При написании долго выполняющихся процессов, я склонен к тому, чтобы они либо записывали информацию в файл журнала, на который я могу периодически заглядывать (например, tail -f), либо заставляли их периодически сообщать о прогрессе (например, опция -v, которая позволяет сообщать количество записей раз в секунду). ).

0

Эта программа принимает трубы /STDIN /STDOUT? Если это так, вам повезло. Я продемонстрирую с помощью md5sum'а большой файл:

$ pv 2GB.zero | md5sum -
1.56GB 0:00:31 [60.2MB/s] [===============================>         ] 80% ETA 0:00:07
f3444be3893c1b9b6fa9dd1acde671a9  -

pv "{имя_файла}" прочитает файл, направит его ко всему, что поддерживает канал. Вы также можете сделать cat "{filename}"|pv| md5sum - но тогда pv не будет знать, сколько байт файла, таким образом, он будет знать только, насколько быстро он идет, а теперь сколько осталось.

Возможности безграничны. Всякий раз, когда вы используете канал или перенаправляете на файл, вы просто добавляете pv в конвейер, чтобы сообщить вам, как быстро данные проходят по каналу! :)

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