хэш каждой строки в текстовом файле - PullRequest
10 голосов
/ 05 мая 2011

Я пытаюсь написать небольшой скрипт, который откроет текстовый файл и даст мне хэш md5 для каждой строки текста. Например, у меня есть файл с:

123
213
312

Я хочу вывод:

ba1f2511fc30423bdbb183fe33f3dd0f
6f36dfd82a1b64f668d9957ad81199ff
390d29f732f024a4ebd58645781dfa5a

Я пытаюсь выполнить эту часть в bash, которая будет читать каждую строку:

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

while read line
do
echo $line
done

позже я делаю:

$ more 123.txt | ./read.line.by.line.sh | md5sum | cut -d '  ' -f 1

но я что-то здесь упускаю, не работает: (

Может быть, есть более простой способ ...

Ответы [ 2 ]

23 голосов
/ 05 мая 2011

Почти там, попробуйте это:

while read -r line; do printf %s "$line" | md5sum | cut -f1 -d' '; done < 123.txt

Если вы не хотите хэшировать символ новой строки в каждой строке, вы должны использовать printf или echo -n вместо опции echo.

В скрипте:

#! /bin/bash
cat "$@" | while read -r line; do
    printf %s "$line" | md5sum | cut -f1 -d' '
done

Скрипт может быть вызван с несколькими файлами в качестве параметров.

6 голосов
/ 05 мая 2011

Вы можете просто вызвать md5sum прямо в скрипте:

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

while read line
do
echo $line | md5sum | awk '{print $1}'
done

Таким образом, скрипт выдает то, что вам нужно: хэш md5 каждой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...