我有一个相当大的文本文件(约10GB),它可以轻松地放入内存中。我的目标是将每一行转换为Base64字符串。当前我的方法需要花费很长时间,并且似乎无法完成,因为它是单线程的。
while read line; do echo -n -i $line | base64 >> outputfile.txt; done < inputfile.txt
能否给我一些提示如何更快地完成这个任务?目前每小时生成的数据约为100 MB(因此需要100个小时才能完成),CPU使用率为5%,磁盘使用率也非常低。
似乎我在控制字符方面被误解了... 所以我包含了一个样本文本文件以及输出应该是什么样子的(chepner对于chomp是正确的):
样本输入:
Банд`Эрос
testè!?£$
``
▒``▒`
样例输出:
user@monster ~ # head -n 5 bash-script-output.txt
0JHQsNC90LRg0K3RgNC+0YE=
dGVzdMOoIT/CoyQ=
YGA=
4paSYGDilpJg
user@monster ~ # head -n 5 perl-without-chomp.txt
0JHQsNC90LRg0K3RgNC+0YEK
dGVzdMOoIT/CoyQK
YGAK
4paSYGDilpJgCg==
user@monster ~ # head -n 5 perl-chomp.txt
0JHQsNC90LRg0K3RgNC+0YE=
dGVzdMOoIT/CoyQ=
YGA=
4paSYGDilpJg
因此,样本总是比人类声明更好;=)
echo
的哪个版本支持-i
选项? - chepnerbase64
会在长编码行中插入换行符;您可能希望通过使用选项-w0
来避免这种情况。如果您的输入文件包含 NUL 字符(这意味着它实际上不是文本文件),那么将其读入 shell 变量时将无法保留它们。 - rici