bash スクリプトを使用して、1 つの入力ファイルを 2 つの出力ファイルに処理したいと考えています。それぞれのファイルには、入力ファイルと同じ行数が含まれていますが、入力行の異なる部分が含まれています。特に、出力ファイルの 1 つには、選択した入力行の md5hash が含まれている必要があります (ファイルごとではなく、行ごとに計算されたハッシュ!):
そう
Input_file.txt: ** スペースで区切られた 3 つのフィールド
12347654 abcdfg 1verylongalpha1234numeric1
34543673 nvjfur 2verylongalpha1234numeric2
75868643 vbdhde 3verylongalpha1234numeric3
出力 file_1.txt は次のようになります: (左のフィールドは MD5sum で、右のフィールドは MD5hash にも含まれる入力ファイルの field3 です):
12df5j754G75f738fjk3483df3fdf9 1verylongalpha1234numeric1
3jf75j47fh4G84ka9J884hs355jhd8 2verylongalpha1234numeric2
4hf7dn46chG4875ldgkk348fk345d9 3verylongalpha1234numeric3
出力 file_2.txt は次のようになります: (入力ファイルの field1 と field2 + MD5HASH)
12347654 abcdfg 12df5j754G75f738fjk3483df3fdf9
34543673 nvjfur 3jf75j47fh4G84ka9J884hs355jhd8
75868643 vbdhde 4hf7dn46chG4875ldgkk348fk345d9
私はすでにその仕事をするスクリプトを持っていますが、それは非常にうまく機能しません: (以下のスクリプトはうまくいかないかもしれません.
#!/bin/bash
While read line
do MD5_HASH=${sed -nr 's/^[[:digit:]]*\s[[:alpha:]]*\s([[:alnum:]]*)/\1/p' <<<$line | md5sum}
read $line DATA_PART1 DATA_PART2 DATA_PART3
echo "$MD5_HASH $DATA_PART3" >> file_1.txt ##append file_2.txt in loop THIS IS WHERE IT GETS HORRIBLY SLOW!
echo "$DATA_PART1 $DATA_PART2 $MD5_HASH"
done < input_file.txt > file_2.txt
exit 0
「追加構成を使用して標準出力をファイルにリダイレクトする」「>>」がパフォーマンスの低下の原因であると思いますが、別の方法は考えられません。行ごとに md5hash を計算する必要があるため、ループ内にあります。
(そして、実際にはMD5SUMに入る部分は正規表現と非常に複雑なパターンでしかキャプチャできないため、sedコマンドが必要です)
それで、誰か提案がありますか?