2013-03-11 5 views
3

Я относительно новичок в программировании оболочки и хотел бы знать, есть ли простой способ вывода результатов команды sar в файл csv. Использование sar > file1.csv выполняет задание, но оно не отформатировано должным образом. Все данные присутствуют в одном столбце. Я попробовал это, но это было хужеВывод результатов команды sar в файл csv

sar -d -u -w 1 1 | grep -v Average | grep -v Linux | tr -s ' ' ',' | tr -d '\n' > file1.csv 

Может кто-нибудь дать мне правильный скрипт для сохранения вывода команды sar в csv файле. Помощь будет оценена.

ответ

1
sar -d -u -w 1 1 | grep -v Average | grep -v Linux |awk '{if ($0 ~ /[0-9]/) { print $1","$2","$4","$5","$6; } }' 



22:14:04,CPU,%nice,%system,%iowait 
22:14:05,all,0.00,8.53,0.00 
22:14:04,proc/s,,, 
22:14:05,0.00,,, 
22:14:04,DEV,rd_sec/s,wr_sec/s,avgrq-sz 
22:14:05,dev8-0,0.00,0.00,0.00 

выходы выше наслаждаться

+1

Можно также установить OFS = "" в BEGIN, блок. –

+0

Спасибо. Может ли это быть распространено на верхнюю команду ?. Я пробовал это, но я не могу видеть имена колонов. top -n1 -b | awk '{if ($ 0 ~/[0-9] /) {print $ 1 "," $ 2 "," $ 4 "," $ 5 "," $ 6 "," $ 7 "," $ 8 " "$ 9", "$ 10", "$ 11", "$ 12", "$ 13", "$ 14", "$ 15; }} '> file2000.csv – Agi

+1

уверен, это потому, что он захватывает 0-9, поэтому вы можете либо отменить это, что будет отображать весь верхний результат top -n1 -b | awk' {print $ 1 "," $ 2 ", "$ 4", "$ 5", "$ 6", "$ 7", "$ 8", "$ 9", "$ 10", "$ 11", "$ 12", "$ 13", "$ 14", "$ 15; } 'или ... top -n1 -b | awk' {if (($ 1 ~/^ [0-9] /) || ($ 0 ~/PID /)) {print $ 1 "," $ 2 "," $ 4 " "$ 5", "$ 6", "$ 7", "$ 8", "$ 9", "$ 10", "$ 11", "$ 12", "$ 13", "$ 14"," $ 15; }} ' , в котором будет отображаться строка PID и весь верхний результат. – Vahid

27

Я знаю, что это своего рода старый, но вы должны или могли бы использовать sadf -dh -- <sar command>. Он является частью пакета sysstat, и он предоставит вам выход csv без необходимости в awk и регулярном выражении. Фактически, последние версии также могут выводить информацию в JSON и XML. Вы можете просто выбрать свой яд :)

Простой пример:

[[email protected] dir]$ sadf -dh -- -p 
localhost.localdomain;-1;2014-06-13 08:47:02 UTC;LINUX-RESTART 
# hostname;interval;timestamp;CPU;%user;%nice;%system;%iowait;%steal;%idle[...] 
localhost.localdomain;600;2014-06-13 09:00:01 UTC;-1;8.80;0.01;1.65;9.51;0.00;80.03 
localhost.localdomain;600;2014-06-13 09:10:01 UTC;-1;3.03;0.71;2.41;0.81;0.00;93.05 
+3

Если это система с несколькими процессорами cpu-core, исключающая h в файле sadf, будет печататься по одной строке на каждый процессор. Этот файл будет легче обрабатывать. –

+2

Этот ответ сильно недооценен. –