【问题标题】:Is there a way to pass multiple values into a CSV file, based on the output of a linux script有没有办法根据 linux 脚本的输出将多个值传递到 CSV 文件中
【发布时间】:2021-09-30 15:32:13
【问题描述】:

我编写了一个小脚本,它将接受用户输入,然后为其生成 md5sum 值

count = 0
echo "Enter number of records"
read number
while [ $count -le $number ]
do
    echo "Enter path"
    read path
    echo "file name"
    read file_name
    md5sum $path"/"$filename  #it shows the md5sum value and path+filename
    ((count++))
done

如何将这些值(路径、文件名和 md5sums)传递到 CSV 文件。 (假设用户选择输入多于 1 条记录)

输出应该是这样的

/c/training,sample.txt,34234435345346549862123454651324      #placeholder values
/c/file,text.sh,4534534534534534345345435342342

【问题讨论】:

  • 可能类似于:echo "${path},${file_name},"$(md5sum "${path}/${filename}") >> my.csv
  • @markp-fuso。它确实有效。很抱歉,但我应该在原始问题中提到这一点,但有没有办法在每次运行脚本时创建一个新的 CSV 文件。我已经编辑了原帖

标签: linux bash csv unix md5sum


【解决方案1】:

以交互方式提示要处理的文件数量令人讨厌。更改脚本,使其接受您要处理的文件作为命令行参数。

#!/bin/sh
md5sum "$@" |
sed 's%^\([0-9a-f]*\)  \(\(.*\)/\)?\([^/]*\)$%\3,\4,\1%'

这里没有仅限 Bash 的构造,所以我将 shebang 切换为 /bin/sh;显然,您仍然可以随意使用 Bash。

md5sum 在路径名之前打印校验和是有原因的。如果您的文件名包含逗号(或换行符,就此而言),重新排序的输出将是不明确的。如果可以的话,实际上可能应该避免使用 CSV 格式; Unix 工具通常更适用于更简单的格式,例如制表符分隔(当然,如果您的文件名中包含制表符,这也会中断)。

【讨论】:

    【解决方案2】:

    您可以提示用户输入文件的完整路径,而不是提示用户输入目录的路径和该目录中的文件名。然后,您可以使用 bash string manipulations 从该路径中提取您需要的内容。

    
    #!/bin/bash
    
    set -euo pipefail
    
    function calc_md5() {
        local path="${1}"
        if [[ -f "${path}" ]] ; then
            echo "${path%/*}, ${path##*/}, $(md5sum ${path} | awk '{ print $1 }')"
        else 
            echo "
                x - Script requires path to file.
                Usage: $0 /path/to/file.txt
            "
            exit 1
        fi
    }
    
    calc_md5 "$@"
    

    使用示例:

    $ ./script.sh /tmp/test/foo.txt
    /tmp/test, foo.txt, b05403212c66bdc8ccc597fedf6cd5fe
    

    【讨论】:

    • 当我运行它时,git bash 刚刚关闭。这里是 Linux 新手,所以不知道为什么会发生这种情况
    猜你喜欢
    • 2021-07-05
    • 2011-07-17
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 2020-11-02
    • 1970-01-01
    相关资源
    最近更新 更多