Prefiks czasu do każdej linii wyjścia komendy bash

1

Używam top polecenie, aby zobaczyć szczegóły dotyczące konkretnych procesów. Wyjście jest przesyłane strumieniowo do grep w ten sposób:

top -n 1 | grep jre

Dane wyjściowe są zwykle około 4 wierszy i chciałbym poprzedzić bieżący czas do każdej linii, tak aby wyglądało to tak:

Przed:

2772 deleteme  20   0  2832 1156  872 R  2.0  0.1   0:00.01 top  

Po:

13:46 25-08-2012 2772 deleteme  20   0  2832 1156  872 R  2.0  0.1   0:00.01 top  
neildeadman
źródło

Odpowiedzi:

3

Spójrz na ts polecenie z moreutils pakiet:

NAME
       ts - timestamp input

SYNOPSIS
       ts [-r] [format]

DESCRIPTION
       ts adds a timestamp to the beginning of each line of input.

Możesz np. używaj go jako takiego:

$ top -n 1 | grep init | ts
aug 28 17:15:00     1 root      20   0 24448 2272 1340 S    0  0.1   0:01.07 init
Daniel Andersson
źródło
To takie proste! ŁAŁ! Dlaczego TS dodaje pustą linię między wpisami? Jakikolwiek sposób, aby to zatrzymać?
neildeadman
1

The ps polecenie jest lepiej dostosowane do tego rodzaju zadań. Spróbuj czegoś takiego:

$ ps -ao bsdstart,fuser,pid,%cpu,%mem,args | grep jre

Od ps strona man:

ps wyświetla informacje o wyborze aktywnych procesów. Jeśli   chcesz powtarzalną aktualizację zaznaczenia i wyświetlanego   informacje, zamiast tego użyj góry (1).

W poleceniu, które zasugerowałem, mówi opcja „-a” ps drukować procesy dla wszystkich użytkowników. The -o określa format wyjściowy. W moim przykładzie (ponownie z ps strona podręcznika):

bsdstart : time the command started.  If the process was
                             started less than 24 hours ago, the output format
                             is " HH:MM", else it is " Mmm:SS" (where Mmm is
                             the three letters of the month).  See also
                             lstart, start, start_time, and stime.

fuser    :  filesystem access user ID.  This will be the
                             textual user ID, if it can be obtained and the
                             field width permits, or a decimal representation
                             otherwise.
pid      :  a number representing the process ID (alias tgid).

%cpu     :  cpu utilization of the process in "##.#" format.
                             Currently, it is the CPU time used divided by the
                             time the process has been running
                             (cputime/realtime ratio), expressed as a
                             percentage.  It will not add up to 100% unless
                             you are lucky.  (alias pcpu).
%mem     :  ratio of the process's resident set size  to the
                             physical memory on the machine, expressed as a
                             percentage.  (alias pmem).

args     : command with all its arguments as a string.
                             Modifications to the arguments may be shown.  The
                             output in this column may contain spaces.  A
                             process marked <defunct> is partly dead, waiting
                             to be fully destroyed by its parent.  Sometimes
                             the process args will be unavailable; when this
                             happens, ps will instead print the executable
                             name in brackets.  (alias cmd, command).  See
                             also the comm format keyword, the -f option, and
                             the c option.
                             When specified last, this column will extend to
                             the edge of the display.  If ps can not determine
                             display width, as when output is redirected
                             (piped) into a file or another command, the
                             output width is undefined (it may be 80,
                             unlimited, determined by the TERM variable, and
                             so on).  The COLUMNS environment variable or
                             --cols option may be used to exactly determine
                             the width in this case.  The w or -w option may
                             be also be used to adjust width.

Możesz to zmienić w zależności od potrzeb. Spójrz na man ps i wyszukaj „STANDARDOWE SPECYFIKACJE FORMATU” (możesz użyć wyszukiwania w stylu vi na stronach man, naciśnij „/” i wprowadź wzór wyszukiwania, „n” przejdzie do następnego dopasowania).

terdon
źródło
1
To idealne! W każdym razie, aby dołączyć nagłówki? Zdaję sobie sprawę, że grep zatrzymuje to, ale w inny sposób?
neildeadman
Właściwie to nie działa poprawnie. jeśli tylko uruchomię top & amp; grep Polecenia razem (tzn. bez Ciebie) wydaje się pokazywać więcej wyników ....
neildeadman
@neildeadman Pokaże więcej linii, jeśli nie używasz -n1 opcja.
terdon
ale z -n 1 a nie twoje dodatkowe polecenia pokazuje 4 linie, ale z twoimi dodatkowymi liniami i -n 1 pokazuje 1 linię, a czasem 3 lub 4.
neildeadman
@neildeadman Innym problemem jest to, że wyjście top jest dziwny. W jakiś sposób manipuluje terminalem. Jeśli powiesz mi, co dokładnie musisz zrobić (na przykład, jakich informacji potrzebujesz z nagłówków na górze), powinienem być w stanie dać ci działające polecenie za pomocą ps.
terdon