在 linux 服务器上散列 CSV 列数据

Hash a CSV Column data on linux server

我有一个包含 header 行的 CSV 文本文件。

文件如下所示:

COLUMN1|COLUMN2|COLUMN3|COLUMN4|...|
Field1|Field2|Field3|Field4|...|
...

我需要隐藏(例如)第 2 列中的数据,而不影响文件中的任何其他条目。

我想使用 SHA1 或 MD5 等散列算法来执行此操作,以便相同的字符串在遇到的任何位置都解析为相同的散列值。关于如何在 linux 中使用 shell 脚本的任何输入。我尝试搜索并找到了 powershell, Python.

的方法

非常感谢任何意见! 感谢您的宝贵时间!!

您可能安装了同时具有 CSV 和摘要模块的语言。也许 ruby:

ruby -rdigest -rcsv -e '
    encoder = Digest::SHA1.new
    output = CSV.new($stdout, col_sep: "|")
    nr = 0
    CSV.foreach(ARGV.shift, col_sep: "|") do |row|
        nr += 1
        row[1] = encoder.hexdigest(row[1]) if nr > 1
        output << row
    end
' file

否则,bash,它会更慢,CSV 解析不涵盖 CSV 边缘情况

declare -A hashes
{
    IFS= read -r header
    echo "$header"
    while IFS='|' read -ra fields; do
        value=${fields[1]}
        if [[ -z ${hashes[$value]} ]]; then
            hashes[$value]=$(printf '%s' "$value" | md5sum | cut -d ' ' -f 1)
        fi
        fields[1]=${hashes[$value]}
        (IFS='|'; echo "${fields[*]}")
    done
} < file