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

Git Log导出CSV后,如何用Shell命令将换行修改文件移至对应行尾

解决Git日志导出CSV时文件路径换行的问题

我来帮你搞定这个格式调整的需求!你遇到的问题是git log --name-only会把修改的文件列表放在提交信息的下一行,而不是同一行末尾,这确实不符合标准CSV的结构。下面用awk命令就能轻松解决这个问题:

基础版本(适用于文件名无逗号的情况)

awk '
    # 匹配提交行(这里假设提交行以英文星期开头,比如Thu/Mon)
    /^[A-Z][a-z]{2}/ {
        # 如果之前有缓存的提交行,先打印出来
        if (prev_line != "") {
            print prev_line
        }
        # 将当前行设为待合并的提交行
        prev_line = $0
        continue
    }
    # 处理文件列表行
    {
        if (prev_line != "") {
            # 把文件列表追加到提交行末尾,用逗号分隔
            prev_line = prev_line "," $0
        }
    }
    # 最后打印剩下的最后一行
    END {
        if (prev_line != "") {
            print prev_line
        }
    }
' your_exported_log.csv > formatted_output.csv

增强版本(兼容文件名含逗号的CSV规范)

如果你的文件路径里可能包含逗号,需要按照CSV标准用双引号包裹文件列表,避免格式错乱:

awk '
    /^[A-Z][a-z]{2}/ {
        if (prev_line != "") {
            print prev_line
        }
        prev_line = $0
        continue
    }
    {
        if (prev_line != "") {
            # 用双引号包裹文件列表,处理含逗号的情况
            prev_line = prev_line ",\"" $0 "\""
        }
    }
    END {
        if (prev_line != "") {
            print prev_line
        }
    }
' your_exported_log.csv > formatted_output.csv

命令说明

  1. 提交行判断:正则/^[A-Z][a-z]{2}/匹配以英文星期缩写开头的行(比如Thu),确保只识别真正的提交信息行;如果你的提交行格式不同,可以调整这个正则(比如如果提交行以时间戳开头,就改成匹配数字的正则)。
  2. 行合并逻辑:用prev_line变量缓存当前提交行,遇到文件行时就把内容追加到缓存行的末尾。
  3. 收尾处理:END块确保最后一行提交信息也能被打印出来。

替换命令里的your_exported_log.csv为你实际的导出文件名,执行后就能得到格式正确的CSV文件啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:32:16