Записать вывод команды в файл csv в perl - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь записать вывод команды в файл CSV. Ниже приведена команда, которую я хочу использовать для записи данных в файл CSV

ps -eo pid,comm,pmem,vsz | grep process  | awk '{print $1",",$2",",$3",",$4}'

Как мы можем сделать это в Perl. Заголовок файла CSV должен иметь, а затем соответствующие значения для этого:

pid,comm,pmem,vsz

Я пытался сделать что-то подобное, но у меня это не работает:

echo "execution started.."

pid,comm,pmem,vsz >> out.txt

while [ true ]; do
    echo "running.."
    sleep 2
    ps -eo pid,comm,pmem,vsz | grep process  | awk '{print $1",",$2",",$3",",$4}' >> out.txt
done

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Это простой способ, с помощью переключателя -a в implicity создать @F для каждой введенной строки (это сокращение для @F = split /\s+\, $_)

echo pid,comm,pmem,vsz > out.csv
ps -eo pid,comm,pmem,vsz | perl -lnaE 'say join ",", @F' >> out.csv
0 голосов
/ 31 августа 2018

Ссылка в комментарии tadman содержит много информации, но вы также можете сделать

ps -eo pid,comm,pmem,vsz | grep process_name | 
    perl -nE '
        BEGIN { say "pid,comm,pmem,vsz" }; 
        say join ",", split
    ' > ps_process.out

(разбито на несколько строк для удобства чтения)

Блок BEGIN выполняется только на этапе компиляции, поэтому он не повторяется в итерациях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...