You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将systemctl --type=service输出格式化为CSV文件?

解决systemctl服务状态转CSV的问题

方法一:直接处理systemctl默认输出(awk)

针对列分割时拆分Description内容的问题,awk可以精准提取前四列,将剩余内容合并为Description字段并添加引号,避免内容被拆分:

systemctl --type=service | awk '
    BEGIN {OFS=","; print "Unit,Load,Active,SUB,Description"}
    NR>1 {
        desc = substr($0, index($0, $5))
        gsub(/"/, "\"\"", desc)  # 转义字段内的双引号,符合CSV规范
        print $1, $2, $3, $4, "\"" desc "\""
    }
'

如果只需要**运行中(active running)**的服务,添加过滤条件:

systemctl --type=service | awk '
    BEGIN {OFS=","; print "Unit,Load,Active,SUB,Description"}
    NR>1 && $3=="active" && $4=="running" {
        desc = substr($0, index($0, $5))
        gsub(/"/, "\"\"", desc)
        print $1, $2, $3, $4, "\"" desc "\""
    }
'

方法二:利用systemctl JSON输出(更可靠)

systemctl支持直接输出JSON格式,搭配jq工具可以更精准地生成CSV,完全避免列对齐问题:

systemctl --type=service --json=short | jq -r '
    ["Unit", "Load", "Active", "SUB", "Description"],
    (.[] | [.unit, .load, .active, .sub, .description])
    | @csv
'

过滤运行中服务的版本:

systemctl --type=service --json=short | jq -r '
    ["Unit", "Load", "Active", "SUB", "Description"],
    (.[] | select(.active=="active" and .sub=="running") | [.unit, .load, .active, .sub, .description])
    | @csv
'

注:如果系统没有jq,可以用包管理器安装(如apt install jq或yum install jq)。

内容的提问来源于stack exchange,提问作者Magicfades

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:05:34