You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让GNU Parallel将每行通过stdin传递给base64编码?

解决每行Base64编码的GNU Parallel用法问题

要实现对文件每行单独进行Base64编码,你不需要使用--pipe选项——这个选项本来就是为大块数据并行处理设计的,默认按1MB分割的行为正是你遇到的问题根源。直接利用GNU Parallel的行处理能力即可,以下是两种可靠方案:

方案1:直接每行调用Base64

cat alphanum.txt | parallel 'echo -n {} | base64'
  • echo -n {}:将当前行内容({}代表Parallel读取的每一行)作为输入传给base64,-n避免额外添加换行符(防止编码结果包含原始行末换行的Base64值)。
  • 这种方式会为每行启动一个base64进程,适合行数不多或对并行度要求不高的场景。

方案2:高效批量行处理(适合大文件)

如果你的文件行数极多,频繁启动进程会有性能损耗,可以用--pipe配合行分割标记强制按行切块:

cat alphanum.txt | parallel --pipe --recend '\n' -L1 base64
  • --recend '\n':告诉Parallel以换行符作为块的结束标记,确保每个块恰好是一行。
  • -L1:进一步限制每个块最多1行,双重保证分割逻辑。
  • 这种方式会将多行打包给少量base64进程处理,但base64会自动为每行生成独立的编码结果。

为什么之前的参数无效?

  • -L 1/-l 1:单独使用时,若你的行长度远小于1MB,Parallel仍可能将多行合并为一个1MB块,因为--pipe的块大小优先级高于行限制。
  • --line-buffered:这是控制输出缓冲的参数,不影响输入块的分割逻辑,所以对你的问题无效。

内容的提问来源于stack exchange,提问作者J Heschl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:08:23