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

如何将含超长行的文本文件逐行传递给脚本处理?

处理超长行的逐行脚本调用方案

针对数MiB级的超长行无法用read命令处理的场景,可以用awk直接逐行读取输入,通过管道将每行内容传递给目标脚本,全程无需创建临时文件,效率远高于split的临时文件方案:

awk '{print | "./process.sh"; close("./process.sh")}' input.txt

关键说明

  • awk原生支持按行解析输入,不受行长度限制,能完整读取超长行内容,不会像read命令因内存或变量长度限制失效。
  • print | "./process.sh" 将当前行内容通过管道传递给process.sh执行;close("./process.sh") 是核心:如果不关闭管道,awk会复用同一个管道,导致process.sh持续等待输入而不执行;关闭管道后,awk会为每一行启动一个独立的process.sh进程,实现真正的逐行调用。
  • 相比split创建临时文件的方式,该方案全程在内存管道中传递数据,彻底避免磁盘IO开销,速度大幅提升。

输入流适配

如果输入来自标准流(比如其他命令的输出管道),直接将输入传给awk即可:

your_command | awk '{print | "./process.sh"; close("./process.sh")}'

备选写法(需注意特殊字符)

如果偏好更直观的命令调用方式,可使用awk的system函数,但要注意行内容包含引号、反斜杠等特殊字符时可能出现转义问题,因此优先推荐管道方案:

awk '{system("printf \"%s\\n\" \"" $0 "\" | ./process.sh")}' input.txt

内容的提问来源于stack exchange,提问作者Christoph Walesch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:13:15