如何将bash脚本输出拆分为两字段并从CSV文件第3行开始插入
解决方案
你的思路完全可行,也可以直接通过管道一步处理不需要额外临时文件,两种实现方式如下:
方式一:直接一步生成最终csv(无需临时文件)
该方案兼容带空格的文件路径,避免拆分错误:
#!/bin/bash # 写入固定表头 echo "title,Path" > final.csv echo "" >> final.csv # 获取最新commit id cid=$(git log -n 1 --pretty=format:"%H") # 处理差异文件的md5并直接转换为逗号分隔格式追加到文件 git diff-tree --no-commit-id --name-only -r "$cid" | xargs -I {} md5sum {} | awk '{printf "%s,%s\n",$1,substr($0,35)}' >> final.csv
方式二:按你提到的临时文件方案实现
#!/bin/bash cid=$(git log -n 1 --pretty=format:"%H") # 第一步:将原始md5输出写入临时文件 git diff-tree --no-commit-id --name-only -r "$cid" | xargs -I {} md5sum {} > tmp_md5.txt # 第二步:写入表头并处理临时文件生成最终csv echo "title,Path" > final.csv echo "" >> final.csv awk '{printf "%s,%s\n",$1,substr($0,35)}' tmp_md5.txt >> final.csv # 可选:清理临时文件 rm -f tmp_md5.txt
说明
substr($0,35)的作用是截取md5sum输出行中第35位开始的所有内容:md5sum标准输出为32位哈希值 + 2个空格 + 文件路径,从第35位开始截取可以拿到完整的文件路径,哪怕路径中包含空格也不会出现拆分错误,兼容性更好。
内容的提问来源于stack exchange,提问作者Helium
相关产品推荐
相关产品推荐

