我有這個腳本:
#!/bin/bash
f_status () {
systemctl list-units | grep $1 | awk '{ printf("SERVICE STATUS: %-25s \t %s \t %s \t %s\n",$1,$2,$3,$4) }'
}
f_line() {
echo "-------------------------------------------------------------------------------------------"
}
echo ""
f_line
f_status "cron"
f_status "ssh"
f_line
這個腳本給了我這樣的結果:
-------------------------------------------------------------------------------------------
SERVICE STATUS: cron.service loaded active running
SERVICE STATUS: ssh.service loaded active running
-------------------------------------------------------------------------------------------
我搜索如何從 3d 列中洗掉“.service”。
我試過 substr($i, 0, -8) 和 ${1:-8}
有誰知道如何從末尾去掉 8 個字符,使其看起來像這樣:
-----------------------------------------------------------------------------------
SERVICE STATUS: cron loaded active running
SERVICE STATUS: ssh loaded active running
-----------------------------------------------------------------------------------
uj5u.com熱心網友回復:
當您使用 awk 時,您永遠不需要 grep,因為grep 'foo' file | awk '{print 7}'可以直接寫成awk '/foo/{print 7}' file.
而不是計算字符,只需洗掉從最后一個開始的所有內容.:
systemctl list-units |
awk -v tgt="$1" '
{
svc = $1
sub(/\.[^.]*$/,"",svc)
}
svc == tgt {
printf "SERVICE STATUS: %-25s \t %s \t %s \t %s\n",svc,$2,$3,$4
}
'
如果使用作為其他服務名稱子集的服務名稱或包含 .regexp 元字符(如..
uj5u.com熱心網友回復:
您需要根據字串長度計算結束位置,請考慮以下簡單示例,讓file.txt內容為
cron.service
ssh.service
然后
awk '{print substr($1,1,length($1)-8)}' file.txt
輸出
cron
ssh
說明:引數為substr字串、開始位置、結束位置、length回傳字串中的字符數。
(在 gawk 4.2.1 中測驗)
uj5u.com熱心網友回復:
您可以gsub在 awk 中使用函式,如下所示:
systemctl list-units | grep 'cron' | awk '{gsub(".service","",$1); printf("SERVICE STATUS: %-25s \t %s \t %s \t %s\n",$1, $2 ,$3,$4) }'
SERVICE STATUS: crond loaded active running
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/364447.html
