Как записать вывод команды Unix 'Top' в файл CSV?
Я пытаюсь получить первые 5 строк top
Команда через сценарий оболочки и мне нужно записать вывод в CSV- файл (мне нужно отслеживать результат каждые 15 секунд). Наконец мне нужно построить график с использованием полученной таблицы.
Я получил сценарий оболочки, чтобы написать первые 5 строк top
команда в текстовый файл:
#!/bin/bash
echo "execution started.."
top -b -n 3 | sed -n '7,1p' >> out.txt
while [ true ]; do
sleep 15
echo "running.."
top -b -n 3 | sed -n '8, 12p' >> out.txt
done
Вот файл out.txt после нескольких выполнений:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3983 arun 20 0 1662480 309580 40936 S 26.3 6.4 13:36.00 gnome-shell
17907 arun 20 0 130020 1680 1172 R 10.5 0.0 0:00.03 top
2016 root 20 0 221792 51172 9636 S 5.3 1.1 4:40.97 Xorg
11917 arun 20 0 7004884 570312 22040 S 5.3 11.7 0:48.83 java
1 root 20 0 59732 7156 3992 S 0.0 0.1 0:02.71 systemd
3983 arun 20 0 1662480 309580 40936 S 36.8 6.4 13:37.23 gnome-shell
2016 root 20 0 221792 51172 9636 S 10.5 1.1 4:41.14 Xorg
2720 mongod 20 0 624364 33716 5200 R 5.3 0.7 1:44.36 mongod
17918 arun 20 0 130020 1676 1172 R 5.3 0.0 0:00.02 top
1 root 20 0 59732 7156 3992 S 0.0 0.1 0:02.71 systemd
3983 arun 20 0 1662480 309580 40936 S 25.0 6.4 13:38.60 gnome-shell
2720 mongod 20 0 624364 33672 5160 S 5.0 0.7 1:44.46 mongod
12081 arun 20 0 2687496 314248 21436 S 5.0 6.5 3:05.51 java
17922 arun 20 0 130020 1680 1172 R 5.0 0.0 0:00.02 top
1 root 20 0 59732 7156 3992 S 0.0 0.1 0:02.71 systemd
Но мне нужны те же данные в формате CSV. Я попытался сделать это, указав имя выходного файла как out.csv! Но это не сработало. (Поскольку он был не в правильном формате, все данные были в первой оболочке!)
Можете ли вы предоставить решение для записи того же вывода в CSV- файл?
1 ответ
Если вы хотите обрезать пробелы и заменить их запятыми, попробуйте
top -b -n 3 | sed -n '8, 12{s/^ *//;s/ *$//;s/ */,/gp;};12q'
sed
Скрипт выполняет следующие замены в строках с 8 по 12:
- Замените все начальные пробелы ничем (в противном случае вы получите пустой первый столбец, когда PID выровнен по правому краю).
- Замените любые конечные пробелы ничем (аналогично, чтобы избежать пустых полей после данных).
- Замените все оставшиеся участки соседних пространств запятой. Распечатать эту строку.
Наконец, в строке 12 мы закончили, поэтому мы уходим sed
,
Оболочка не обращает никакого внимания на имя файла, на который вы перенаправляете, и, как правило, расширения файлов в Unix являются неофициальными украшениями, а не спецификаторами типов файлов, как на некоторых платформах.
Вы могли бы сделать echo hello >outputfile.ps
и на выходе все равно будет текст, а не PostScript (или ряд других возможных интерпретаций .ps
расширение файла). В любом случае, echo
команда не знает, что она перенаправляется, так как она обрабатывается оболочкой до запуска команды, в любом случае. (Что ж, echo
это встроенная оболочка, поэтому теоретически в этом случае может быть некоторая координация.)