Alternatywa dla „głowy”, która nie wychodzi?

13

Potrzebuję narzędzia, które wydrukuje pierwsze n wierszy, ale następnie kontynuuje działanie, wysysając pozostałe wiersze, ale nie drukując ich. Używam go, aby nie przytłaczać terminala danymi wyjściowymi procesu, który musi być kontynuowany (zapisuje wyniki w pliku).

Pomyślałem, że dam radę process | {head -n 100; cat > /dev/null}, ale czy jest coś bardziej eleganckiego?

ItdayD
źródło
2
Proces będzie kontynuowany po głowicy, po prostu nie będzie już drukowany na terminalu.
123
7
Jaki problem należy faktycznie stara się rozwiązać?
Satō Katsura,
2
Co masz na myśli, żeby je ssać? Jeśli po prostu potoczysz do głowy, pozostałe dane wyjściowe zostaną odrzucone.
Julie Pelletier,
7
@JuliePelletier i stdout zostaną zamknięte, a dobrze napisane programy (te, które piszą tylko na stdout, w każdym razie) zauważą to i zakończą wcześniej.
cas
@castrap '' PIPE
Satō Katsura,

Odpowiedzi:

22

Aby kontynuować „zasysanie” danych wyjściowych processpodczas drukowania tylko pierwszych 100 (lub cokolwiek) linii:

process | awk 'NR<=100'

Lub:

process | sed -n '1,100p'
John1024
źródło
13
Zwykle używam... | tee /dev/null | head ...
David Schwartz,
2
@DavidSchwartz tak - tak bym zrobił. Znacznie bardziej preferowane, ponieważ można również zrzucić wszystkie dane wyjściowe w pliku i zbadać je w późniejszym czasie. Nigdy nie wiadomo, kiedy będzie to potrzebne - co gorsza, masz plik, który czasami zastępujesz, w najlepszym razie możesz użyć go jako dziennika do analizy tego, co / dlaczego się wydarzyło.
VLAZ,