2011-05-04 2 views
8

텍스트 파일을 열고 텍스트 줄마다 md5 해시를 제공하는 작은 스크립트를 작성하려고합니다. 텍스트 파일의 각 행을 해시

123 
213 
312 

내가 출력이 원하는 : 예를 들어 내가 가진 파일이

ba1f2511fc30423bdbb183fe33f3dd0f 
6f36dfd82a1b64f668d9957ad81199ff 
390d29f732f024a4ebd58645781dfa5a 

나는 각 라인 읽을 떠들썩한 파티에서이 부분 할 노력하고있어 :

#!/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 

하지만 나는 여기에 뭔가를 ssing 작동하지 않습니다 :(그냥 직접 스크립트에 md5sum이를 호출 할 수 있습니다

답변

4

어쩌면 더 쉬운 방법이 ... :

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

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

그 방법을 스크립트가 직접 밖으로 뱉어 당신이 원하는 : 각 라인의 MD5 해시.

거의 다
+4

각 행에 대해 불필요한 인스턴스를 생성하지 않으려면 awk를 루프 외부에 배치해야합니다. 그냥해라. awk '{print $ 1}''. –

+2

기본적으로 echo는 문자열의 끝에 개행 문자를 추가하므로 echo -n $ line을 사용해야합니다. 결과적으로 문자열의 MD5 값을 변경합니다. –

+0

그의 예제에는 해시에 개행 문자가 포함되어 있습니다 ... 값을 확인했습니다. –

17

,이 시도 :

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

당신은 또한 모든 라인에서 개행 문자를 해시 할 않는 한 당신이 echo 옵션 대신 printf 또는 echo -n을 사용해야합니다. 스크립트에서

:

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

스크립트는 매개 변수로 여러 파일을 호출 할 수 있습니다.

+2

또는 문자열을 "echo"없이 md5의 stdin으로 전달하십시오. md5 <<< "$ line" –

+4

@glenn jackman이 예제는 또한 문자열의 해시를 변경하는 각 줄의 개행 문자를 해시합니다. –

관련 문제