Альтернатива «голове», которая не выходит?


13

Мне нужна утилита, которая напечатает первые n строк, но затем продолжит работу, засасывая остальные строки, но не печатая их. Я использую его, чтобы не перегружать терминал выводом процесса, который должен продолжать выполняться (он записывает результаты в файл).

Я подумал, что могу сделать process | {head -n 100; cat > /dev/null}, но есть ли что-то более элегантное?


2
Процесс будет продолжен после заголовка, он просто больше не будет печатать на терминал.
123

7
Какую проблему вы на самом деле пытаетесь решить?
Satō Katsura

2
Что ты имеешь в виду, чтобы сосать их? Если вы просто направите трубку к голове, то оставшийся вывод будет отклонен.
Джули Пеллетье

7
@JuliePelletier и stdout будут закрыты, и хорошо написанные программы (те, которые в любом случае пишут только в stdout) заметят это и завершат работу рано.
Cas

@castrap '' PIPE
Satō

Ответы:


22

Чтобы продолжить «высасывать» вывод process, печатая только первые 100 (или что-то еще) строк:

process | awk 'NR<=100'

Или:

process | sed -n '1,100p'

13
Я обычно просто использую... | tee /dev/null | head ...
Дэвид Шварц

2
@DavidSchwartz - это то, что я буду делать. Гораздо предпочтительнее, поскольку вы также можете записать все выходные данные в файл и проверить их в более поздний момент времени. Вы никогда не знаете, когда это понадобится - в худшем случае у вас есть файл, который вы иногда перезаписываете, в лучшем случае вы можете использовать его как журнал для анализа того, что / почему произошло.
ВЛАЗ
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.