如何使用自定义标头打印 awk 命令的结果

如何使用自定义标头打印 awk 命令的结果

我正在尝试打印我的机器中所有正在运行的服务。为此我使用命令

a=$(sudo systemctl list-units --type service --all | grep running | awk -v OFS='\t' '{ print $1, $2, $4 }')

上述命令的输出是

    abrt-xorg.service       loaded  running
abrtd.service   loaded  running
accounts-daemon.service loaded  running
atd.service     loaded  running
auditd.service  loaded  running
avahi-daemon.service    loaded  running
bolt.service    loaded  running
chronyd.service loaded  running
colord.service  loaded  running
crond.service   loaded  running
cups.service    loaded  running
dbus.service    loaded  running
firewalld.service       loaded  running
gdm.service     loaded  running
grafana-server.service  loaded  running
gssproxy.service        loaded  running
influxdb.service        loaded  running
irqbalance.service      loaded  running
ksmtuned.service        loaded  running
libstoragemgmt.service  loaded  running
libvirtd.service        loaded  running
lvm2-lvmetad.service    loaded  running

第一列是服务名称第二列是加载状态第三列是运行状态...

在每列的输出上方,我需要标题为

column name loading status running status

我该怎么办...请帮助我

我运行了命令systemctl list-unit-files

得到的输出像

UNIT FILE                                     STATE   
proc-sys-fs-binfmt_misc.automount             static  
dev-hugepages.mount                           static  
dev-mqueue.mount                              static  
proc-fs-nfsd.mount                            static

答案1

BEGIN在命令中使用awk来打印标题:

systemctl list-units --type service --all | awk 'BEGIN{print "Unit State Status"};$4 ~ /^running$/{print $1,$2,$4}' | column -t

您可以通过管道将其输入column -t以获得良好的可读输出。您还可以使用awk而不是grep检查第 4 列是否匹配running

正如其他评论中提到的,您也可以运行systemctl list-units --type service --state=running而不是使用grepawk过滤掉正在运行的服务。

相关内容