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

Unix下如何将含不同分隔符的命令行键值对输出转为CSV文件

AWK实现自定义命令日志转指定CSV格式

核心处理逻辑是通过正则匹配逐个提取目标字段,避开直接按逗号/空格切分导致的字段错位、IsEnabled字段末尾多余.、启动时间含空格无法直接切分的问题。

可直接使用的完整命令

custom-command | awk '
BEGIN {
    # 输出CSV固定表头
    print "current-capacity, buffer, not-used/total, IsEnabled, Up since"
}
# 跳过命令提示符行、空行等无效内容
/^bash\$/ || /^[[:space:]]*$/ { next }
{
    # 正则匹配逐个提取字段值,自动过滤多余符号
    match($0, /current-capacity: ([^,]+)/, cap)
    match($0, /buffer: ([^,]+)/, buf)
    match($0, /not-used\/total: ([^,]+)/, ratio)
    match($0, /IsEnabled: ([0-9]+)\./, en)
    match($0, /Up since (.*)$/, uptime)
    # 按要求格式拼接输出
    printf "%s, %s, %s, %s, %s\n", cap[1], buf[1], ratio[1], en[1], uptime[1]
}'

使用说明

  • 命令会自动跳过开头的命令提示符行、输出中的空行,不会将无效内容写入结果
  • 正则匹配逻辑不依赖字段固定位置,后续如果日志字段顺序微调,只要键名不变就可以正常解析
  • IsEnabled字段的提取规则会自动忽略值末尾的.,不需要额外做字符串替换
  • 如果需要将结果持久化到CSV文件,直接在命令末尾加重定向即可:首次写入用> 目标文件路径覆盖写(保留表头),后续定期追加写入用>> 目标文件路径即可。

注:你给出的目标CSV示例存在几处笔误(如第二行not-used/total写为25/、第三行字段值和原始日志不匹配),上述命令会严格提取原始日志中的真实字段值,符合结构化入库的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:51:27