我想使用 bash 脚本将 1 个输入文件处理为 2 个输出文件,每个文件包含与输入文件相同的行数,但输入行的不同部分。特别是其中一个输出文件必须包含输入行选择的 md5hash,(每行计算的哈希,而不是每个文件!):
所以
Input_file.txt: ** 3 个字段,以空格分隔
12347654 abcdfg 1verylongalpha1234numeric1
34543673 nvjfur 2verylongalpha1234numeric2
75868643 vbdhde 3verylongalpha1234numeric3
输出文件_1.txt 必须如下所示:(左字段是 MD5sum,右字段是来自输入文件的字段 3,它也包含在 MD5hash 中):
12df5j754G75f738fjk3483df3fdf9 1verylongalpha1234numeric1
3jf75j47fh4G84ka9J884hs355jhd8 2verylongalpha1234numeric2
4hf7dn46chG4875ldgkk348fk345d9 3verylongalpha1234numeric3
输出 file_2.txt 必须如下所示:(输入文件中的 field1 和 field2 + MD5HASH)
12347654 abcdfg 12df5j754G75f738fjk3483df3fdf9
34543673 nvjfur 3jf75j47fh4G84ka9J884hs355jhd8
75868643 vbdhde 4hf7dn46chG4875ldgkk348fk345d9
我已经有一个脚本可以完成这项工作,但它的性能非常糟糕:(下面的脚本可能不起作用,这是我的想法,我写这个的地方没有 linux,抱歉)
#!/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。
(哦,sed 命令是必要的,因为实际上进入 MD5SUM 的部分只能用正则表达式和相当复杂的模式捕获)
所以有人有建议吗?