Linux

如何使用自定義標頭列印 awk 命令的結果

  • September 24, 2019

我試圖在我的機器上列印所有正在執行的服務。為此,我使用命令

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

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過濾掉正在執行的服務。

引用自:https://unix.stackexchange.com/questions/543380