散列文本文件中的每一行

aaa*_*aaa 11 bash hash command-line

我正在尝试编写一个小脚本,它将打开一个文本文件,并为每行文本提供一个md5哈希.例如,我有一个文件:

123
213
312
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

ba1f2511fc30423bdbb183fe33f3dd0f
6f36dfd82a1b64f668d9957ad81199ff
390d29f732f024a4ebd58645781dfa5a
Run Code Online (Sandbox Code Playgroud)

我正在尝试在bash中执行此部分,它将读取每一行:

#!/bin/bash
#read.file.line.by.line.sh

while read line
do
echo $line
done
Run Code Online (Sandbox Code Playgroud)

后来我做了:

$ more 123.txt | ./read.line.by.line.sh | md5sum | cut -d '  ' -f 1
Run Code Online (Sandbox Code Playgroud)

但我在这里遗漏了一些东西,不起作用:(

也许有一种更简单的方法......

Lar*_*man 24

几乎在那里,试试这个:

while read -r line; do printf %s "$line" | md5sum | cut -f1 -d' '; done < 123.txt
Run Code Online (Sandbox Code Playgroud)

除非你还想在你应该使用的每一行中使用换行字符printfecho -n代替echo选项.

在脚本中:

#! /bin/bash
cat "$@" | while read -r line; do
    printf %s "$line" | md5sum | cut -f1 -d' '
done
Run Code Online (Sandbox Code Playgroud)

可以使用多个文件作为参数调用脚本.

  • @glenn jackman你的例子也会散列每行的换行符,这会改变字符串的散列. (4认同)
  • 或者将字符串传递给没有"echo"的md5的stdin:md5 <<<"$ line" (2认同)

Wes*_*ker 6

您可以直接在脚本中调用md5sum:

#!/bin/bash
#read.file.line.by.line.sh

while read line
do
echo $line | md5sum | awk '{print $1}'
done
Run Code Online (Sandbox Code Playgroud)

这样,脚本直接吐出你想要的东西:每行的md5哈希.

  • 您应该将awk放在外部循环中,以避免为每一行产生不必要的实例.只做`完成| awk'{print $ 1}'`. (4认同)
  • 你应该做echo -n $ line,因为默认情况下,echo会在字符串的末尾添加换行符.因此,它会更改字符串的MD5值. (3认同)
  • 他的示例包括散列中的换行符...我检查了这些值。 (2认同)