2013-03-11 170 views
3

我对shell编程相对较新,想知道是否有简单的方法将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块。 – 2013-03-12 00:46:42

+0

谢谢。同样可以扩展到最高命令吗?我试过这个,但我不能看到col的名字。 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 2013-03-12 15:20:43

+1

当然,它是因为它捕获了0-9,所以你可以去掉那个会列出所有顶级结果的顶层-n1 -b | awk'{print $ 1“,”$ 2“, “$ 4”, “$ 10”, “$ 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 2013-03-12 16:52:56

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系统,省略sadf中的h选项将会为每个cpu-core打印一行。这个文件将更容易处理。 – 2015-07-06 10:29:20

+2

这个答案严重被低估。 – 2015-10-24 06:35:11