Wybieranie określonych pól z polecenia wyjściowego.

1
top -o %MEM -b > file.txt

czas 1 = 27 marca 21:27:55

time2 = 28 marca 20:27:32

Muszę tylko przekierować dane wyjściowe polecenia top -o %MEM -bdo output.txt

jeśli czas1 <= data1 <= czas2

gdzie time1, time2, date1są data wybiorę! Przydałby mi się czas na Uniksa!

Czy jest to możliwe w powłoce linux?

Jak mogę to zrobić? Powinienem zapisać informacje w formacie XML / JSON zamiast pliku txt!

Ed S.
źródło
gdzie ma wartości time1, time2a datepochodzą?
rsm
@rsm: time1, time2, date1to data wybiorę!
Ed S
1
ok, więc czy możesz je wybrać w czasie uniksowym (sekundy od 1970-01-01)? znacznie łatwiej jest pracować na liczbach niż na ciągach reprezentujących datę.
rsm
@rsm: tak! Mogę przekonwertować go na czas uniksowy!
Ed S
dla zachowania czystości tutaj, czy możesz poprosić o konwersję topdanych wyjściowych do XML / JSON w osobnym pytaniu i pozostaw pytanie tak, jak było wcześniej?
rsm

Odpowiedzi:

1

Współczesne powłoki są językami programowania, więc możesz używać arytmetyki do sprawdzania warunków dat. Jednak topw trybie wsadowym działa aż do osiągnięcia limitu iteracji, a po uruchomieniu topnie można sprawdzić warunku dat. Musisz więc uruchomić topz limitem iteracji ustawionym na 1 i zrestartować go w pętli while:

#!/bin/bash
output_file="file.txt"
iteration_delay=5s
time1=1491004315
time2=3500000000
date1=`date +%s` #we initialize date1 with current unix time

while ((1)); do
    if (($time1 <= $date1 && $date1 <= $time2)); then
        top -o %MEM -b -n 1 >> $output_file
    fi
    sleep $iteration_delay
    # something should update date1, time1 or time2 here...?
done

EDYCJA: Aby użyć tego skryptu, skopiuj / wklej go na przykład do pliku mytop.sh, ustaw na nim plik wykonywalny :

chmod +x mytop.sh

a następnie możesz rozpocząć jak zwykle, wykonując:

./mytop.sh

Aby anulować, naciśnij ctrl+ c.

Nie ma żadnego wizualnego wskaźnika, że ​​działa, a niektórzy ludzie czują się lepiej, gdy jest jakiś efekt. Jeśli chcesz, możesz dodać na przykład:

echo .

wiersz w skrypcie po sleepwierszu, aby wydrukować nową kropkę przy każdej iteracji.

rsm
źródło
Jak mogę uruchomić ten skrypt?
Ed S
1
@EdS dobry punkt, sprawdź moją zaktualizowaną odpowiedź i daj mi znać, jeśli coś jest teraz niejasne.
rsm
1
Dziękuję Ci! To jasne! Zadałem inne pytanie: superuser.com/questions/1194437/...
Ed S
skrypt nie przestaje działać ...
Ed S
@EdS użyj [ctrl] + [c], aby zatrzymać skrypt (może być konieczne kilkukrotne naciśnięcie).
rsm