カスタムヘッダーを使用して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

最初の列はサービス名、2番目の列はロード状態、3番目の列は実行状態です。

各列の出力の上にヘッダーが必要です。

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

BEGINawkタイトルを印刷するには、コマンドに使用します。

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

column -t読みやすい出力を得るためにパイプで接続することができます。列4が一致していることを確認するawk代わりに使用することもできます。greprunning

他のコメントで述べたように、実行中のサービスを使用またはフィルタリングするsystemctl list-units --type service --state=running代わりに実行することもできます。grepawk

関連情報