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

Bash如何高效查找含LG标记的文本行并改写,解决逐行读取速度过慢问题

性能问题核心原因

你原有脚本性能差的核心原因是逐行循环时,每处理一条匹配行就要启动echo、awk、sed三个独立子进程,300万行的场景下进程创建销毁的开销占了绝大多数运行时间,完全不需要额外做行号查找再替换的操作,直接用单进程的文本处理工具就能把速度提升几十到上百倍。

最优解决方案

直接用单个awk命令处理全文件即可,300万行通常10秒内就能跑完。

方案1:对齐原有逻辑(LG固定在第8个字段)

和你现有脚本的处理逻辑完全一致,默认LG编号是行内按空白分割的第8个字段:

awk '/LG/{ $1 = $8; sub(/^/, ">") } 1' kopia_pliku_docelowego > nowy.txt

命令说明:

  • /LG/ 筛选所有包含LG的行
  • 把第一个字段替换为第8个字段,在行首补>
  • 末尾的1代表所有行直接输出

方案2:通用兼容方案(LG位置不固定)

如果LG编号的字段位置可能变化,用正则匹配提取LG+数字的组合,更稳妥:

awk '/LG[0-9]+/{ 
    match($0, /LG[0-9]+/); 
    lg_val = substr($0, RSTART, RLENGTH);
    $1 = lg_val ",";
    sub(/^/, ">");
} 1' kopia_pliku_docelowego > nowy.txt

轻量极速方案(sed实现)

如果追求极致的运行速度,用sed处理开销比awk更低:

sed -E '/LG[0-9]+/ s/^>([^ ]+)(.*LG([0-9]+))/>LG\3,\2/' kopia_pliku_docelowego > nowy.txt
额外提示

如果你需要原位修改原文件,awk方案可以加-i inplace参数(GNU awk支持),sed方案可以加-i参数直接修改原文件,不需要额外重定向输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:15:07