У меня есть большой текстовый файл (около 10 ГБ), который подходит без проблем в памяти. Моя цель - преобразовать каждую строку в строку base64. В настоящее время мой метод берет навсегда и, кажется, не завершается, потому что он однопоточный.Base64 кодирование линии за строкой более быстрый способ
while read line; do echo -n -i $line | base64 >> outputfile.txt; done < inputfile.txt
Может кто-нибудь дать мне подсказку, как это сделать быстрее? Это решение создает около 100 МБ в час (так что время финиширования составит 100 часов). Потребление процессора составляет 5%, а использование диска очень низкое.
Кажется, я получил missunderstood о контрольных символов ... Так я включал текстовый файл образца, и как результат должен быть (chepner верна с Chomp):
Пример ввода:
Банд`Эрос
testè!?£$
``
▒``▒`
Примера вывод:
[email protected] ~ # head -n 5 bash-script-output.txt
0JHQsNC90LRg0K3RgNC+0YE=
dGVzdMOoIT/CoyQ=
YGA=
4paSYGDilpJg
[email protected] ~ # head -n 5 perl-without-chomp.txt
0JHQsNC90LRg0K3RgNC+0YEK
dGVzdMOoIT/CoyQK
YGAK
4paSYGDilpJgCg==
[email protected] ~ # head -n 5 perl-chomp.txt
0JHQsNC90LRg0K3RgNC+0YE=
dGVzdMOoIT/CoyQ=
YGA=
4paSYGDilpJg
Так образцы каждый раз лучше, чем человеческие декларации; =)
Какая версия 'echo' поддерживает опцию' -i'? – chepner
По умолчанию 'base64' вставляет новые строки в длинные кодированные строки; вы, вероятно, захотите этого избежать, используя опцию '-w0'. И если ваш входной файл содержит NUL (что означало бы, что это не текстовый файл), то они не будут сохранены путем чтения в переменную оболочки. – rici