Вибір конкретних полів з команди виводу.


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

час1 = 27 березня 21:27:55

time2 = 28 березня 20:27:32

Мені потрібно лише перенаправити висновок команди top -o %MEM -bна output.txt

якщо час1 <= дата1 <= час2

де time1, time2, date1є датою я вибираю! Я міг би використовувати час Unix!

Чи можливо це в оболонці Linux?

Як я можу це зробити? Я повинен зберігати інформацію у форматі XML / JSON замість файлу txt!


де ж значення time1, time2і dateприйшли?
rsm

@rsm: time1, time2, date1є датою я вибираю!
Ed S

1
ОК, тож чи можете ви їх вибрати в unix час (секунди з 1970-01-01)? набагато простіше працювати над номерами, ніж над строковим представленням дати.
rsm

@rsm: так! Я можу конвертувати його в unix час!
Ed S

щоб зберегти тут чисті речі, можете, будь ласка, запитати про перетворення topрезультатів у XML / JSON в окремому запитанні та залишити це питання, як було раніше?
rsm

Відповіді:


1

Сучасні оболонки є мовами програмування, тому ви можете використовувати арифметику для перевірки стану дат. Однак topу пакетному режимі працює до досягнення межі ітерації, і як тільки ви запустите top, ви не можете перевірити стан дат. Тому вам потрібно запустити topліміт ітерації, встановлений на 1, і перезапустити його в циклі:

#!/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

РЕДАКТУВАННЯ: Щоб використовувати цей скрипт, скопіюйте та вставте його, наприклад, на файл mytop.sh, встановіть на ньому виконуваний файл :

chmod +x mytop.sh

і тоді ви можете запустити його, як зазвичай:

./mytop.sh

Щоб скасувати, натисніть ctrl+ c.

Немає візуального показника, що він працює, і деякі люди почувають себе краще, коли є якийсь вихід. Якщо ви хочете, ви можете додати, наприклад:

echo .

рядок у сценарії за sleepрядком, щоб надрукувати нову крапку на кожній ітерації.


Як я можу запустити цей сценарій?
Ed S

1
@ Добрий момент, будь ласка, перевірте мою оновлену відповідь і повідомте мені, чи є щось незрозуміле зараз.
рсм

1
Дякую! Це зрозуміло! Я розмістив ще одне запитання: superuser.com/questions/1194437/…
Ed S

сценарій не перестає працювати ...
Ed S

@EdS використовуйте [ctrl] + [c], щоб зупинити сценарій (можливо, вам потрібно буде натиснути його кілька разів).
рсм
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.