linux 如何将systemctl --type=service输出格式化为csv

vaqhlq81  于 2023-03-22  发布在  Linux
关注(0)|答案(1)|浏览(151)

例如,输出为
systemctl --type=service
是这样的:

Unit                    Load   Active SUB      Description
abrt-ccpp.service       loaded active exited   Install ABRT coredump hook
abrt-oops.service       loaded active running  ABRT kernel log watcher

我怎样才能把它变成一个看起来更像这样的csv呢?

Unit,Load,Active,SUB,Description
abrt-ccpp.service,loaded,active,exited,"Install ABRT coredump hook"
abrt-oops.service,loaded,active,running,"ABRT kernel log watcher"

我试着用sed来去掉空格,就像这样:

$ sed 's/ \{1,\}/,/g' file

正如预期的那样,这样做的问题是Description列也用逗号分隔。
所以我想到用awk删除描述列,也许只是单独获取描述,然后在以后追加它。

systemctl --type=service | awk '!($5="")'

这只删除了标题“Description”,它的所有内容仍然在输出中。
有没有更好/更简单的方法来获取所有服务的列表以及它是否正在运行的状态?或者甚至只是可以放在csv中的正在运行的服务的列表。

hwamh0ep

hwamh0ep1#

我的建议(仅运行服务的输出):

systemctl --type=service|awk '{print $1 "," $2 "," $3 "," $4}'|grep running

这将输出如下内容:

accounts-daemon.service,loaded,active,running
acpid.service,loaded,active,running
avahi-daemon.service,loaded,active,running
bluetooth.service,loaded,active,running
...

你也可以使用正则表达式来捕获描述,但我不知道这对你是否有任何价值。

相关问题