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?


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'

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.