【问题标题】:To split the output(s) of a script into two fields and insert that output from a specific row in a csv file将脚本的输出拆分为两个字段,并将该输出从特定行插入 csv 文件
【发布时间】:2021-11-10 20:56:55
【问题描述】:

我正在尝试将以下代码的输出拆分为两个字段并从 csv 文件的第 3 行插入

#!/bin/bash
cid=`git log -n 1 --pretty=format:"%H"`
git diff-tree --no-commit-id --name-only -r $cid | xargs -I {} echo '\'{} | xargs -I {} md5sum > final.csv

当前输出以单行形式出现(需要分隔成字段)

title,Path          
              
l34sdg232f00b434532196298ecf8427e /path/to/file              
sg35s3456f00b204e98324998ecsdf3af /path/to/file                 

预期输出

final.csv

title,Path                     

l34sdg232f00b434532196298ecf8427e,/path/to/file            
sg35s3456f00b204e98324998ecsdf3af,/path/to/file            

我正在考虑将脚本的输出放在第三个文件中,然后使用 awk 逐行读取该文件。不确定这是否是正确的方法。 提前致谢。

【问题讨论】:

  • 如果您将管道之前的一些中间输出添加到问题中,那将非常有帮助....#!/bin/bash; cid=$(git log -n 1 --pretty=format:"%H"); git diff-tree --no-commit-id --name-only -r $cid
  • 所以....你确定这就是你当前输出的样子吗?如果我对 git 树运行它(从at 固定到格式),我会得到这样的结果:d41d8cd98f00b204e9800998ecf8427e - 在每一行上重复。它看起来不像你的。也就是说:你的 format 不是 CSV,它是固定长度的。
  • @tink 抱歉,我无法通过它传达确切的含义。我试图将 csv 文件展示为一个表格,是的,它会显示 md5 以及文件所在的路径。已经交叉检查了。现在已编辑问题
  • 嗯......您修改后的current output 仍然与我运行脚本时看到的相差甚远。
  • 请问您看到了什么,我得到了最新提交中包含的所有文件的 md5sum 值,逐行显示

标签: bash git xargs md5sum


【解决方案1】:

你似乎把事情复杂化了。

#!/bin/sh
cid=$(git log -n 1 --pretty=format:"%H")
git diff-tree --no-commit-id --name-only -r "$cid" |
xargs md5sum |
sed 's/  /,/' > final.csv

这只是用逗号替换md5sum 输出中的两个空格。

因为这里没有特定于 Bash 的内容,所以我将 shebang 更改为 #!/bin/sh;显然,如果您愿意,仍然可以随意使用 Bash。

我还从过时的 `backtick` 语法切换到现代的 $(command substitution) 语法。

如果您绝对需要顶部的 CSV 标头,在 sed 脚本中添加它应该是微不足道的。一般来说,标题行比实际有用更令人讨厌,所以也许不要。

【讨论】:

    【解决方案2】:

    这种方法可以满足您的要求:

    #!/bin/bash
    cid=$(git log -n 1 --pretty=format:"%H")
    git diff-tree --no-commit-id --name-only -r "$cid" | while read -r path
    do
            md5sum "${path}"
    done | awk 'BEGIN{printf "%s,%s\n", "title", "path";printf "\n"}{printf "%s,%s\n",$1,$2}' > final.csv
    

    【讨论】:

    • 对第二个换行符使用单独的printf 是......很奇怪。你确定你不喜欢简单的printf "%s,%s\n\n", "title", "path"吗?或者,假设空行是虚假的,根本不应该存在。
    • 你说的很对@tripleee ...那是个脑残。
    猜你喜欢
    • 1970-01-01
    • 2019-08-17
    • 2021-11-29
    • 1970-01-01
    • 2017-05-09
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多