【问题标题】:Concatenation and MD5 with awk使用 awk 进行连接和 MD5
【发布时间】:2017-03-29 14:14:33
【问题描述】:

我想连接 CSV 文件中的所有列,然后应用 MD5 哈希。

我想使用 awk。

通过这段代码,我得到了第三列的连接。

awk -F'#' '{  { printf "%s",$3 } }'

我可以用这段代码得到哈希

echo -n "HELLO WORLD" | md5sum

谁能帮我整合这两种方法?首先连接所有列,然后应用 MD5 哈希。

CSV 示例:

A#B#C#D
E#F#G#H
I#J#K#L

输出将是:

 md5(ABCD)
md5(EFGH)
md5(IJKL)

【问题讨论】:

  • 你试过用你的 awk 命令替换 echo -n "HELLO WORLD" 吗?这在什么方面不符合您的要求?
  • 感谢您的回复。这里我的 csv: A#B#C#D E#F#G#H I#J#K#L 输出将是: md5(ABCD) md5(EFGH) md5(IJKL)

标签: bash awk cygwin md5sum


【解决方案1】:

连接列意味着删除分隔符,这是一种更简单的方法

tr -d '#' <file | md5sum

如果您只想提取第三列并将行连接成一个大字符串(但是为什么会丢失信息)

cut -d# -f3 file | tr -d '\n' | md5sum

注意现在是第三列

ab
c

a
bc

最终会得到相同的哈希值。通过使用相同的分隔符连接值来更好地保持字段的独特性

cut -d# -f3 file | paste -sd# | md5sum

但是,如果没有连接,您可以假设字段用换行符分隔并使用

cut -d# -f3 file | md5sum

除非有不明原因。

更新:您想为每一行创建 md5 哈希!这是问题中缺少的关键信息。

您不能像在其他程序中那样通过管道输入 md5sum 行(每次都需要一个新的调用)。解决这个问题的一种方法是

tr -d '#' <file | while read line; do echo $line | md5sum; done

ed5d34c74e59d16bd6d5b3683db655c3  -
8ad37f51cbc6de792c885acf17ba7e40  -
fe672d984bef56cbfce488080f8055b7  -

但是,请注意,如果您的字段长度不同且值重叠,则会丢失信息。

例如,AB#CA#BC 将生成相同的哈希值,这可能需要也可能不需要,但我猜你可能没有考虑过。

【讨论】:

  • 是的,错过了,如果是这样,这个问题的目的是什么?
  • 我不知道这个问题的目的是什么。因此没有答案:-)。
  • 感谢这种方法。这里是我的csv示例: A#B#C#D E#F#G#H I#J#K#L 输出将是: md5(ABCD) md5(EFGH) md5(IJKL)
猜你喜欢
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 2014-11-22
  • 2011-03-12
  • 1970-01-01
  • 2015-03-15
相关资源
最近更新 更多