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
命令说明
- 提交行判断:正则
/^[A-Z][a-z]{2}/匹配以英文星期缩写开头的行(比如Thu),确保只识别真正的提交信息行;如果你的提交行格式不同,可以调整这个正则(比如如果提交行以时间戳开头,就改成匹配数字的正则)。 - 行合并逻辑:用
prev_line变量缓存当前提交行,遇到文件行时就把内容追加到缓存行的末尾。 - 收尾处理:
END块确保最后一行提交信息也能被打印出来。
替换命令里的your_exported_log.csv为你实际的导出文件名,执行后就能得到格式正确的CSV文件啦!
内容的提问来源于stack exchange,提问作者KakashiHatake
相关产品推荐
相关产品推荐

