linux - 在文件中每第 n 次出现字符时插入内容

标签 linux bash shell sed awk

我有一个包含查询的文件,每个查询以“;”结尾,我想添加一个“COMMIT;BEGIN;”每 100 个查询。查询可能需要超过 1 行。

例如:


    INSERT INTO table
    VALUES(...);
    DELETE FROM table WHERE ...;
    UPDATE table
    SET ...;

所以我想替换每 100 个“;”与“提交;开始;” (我知道我必须在文件的开头添加一个 BEGIN; 并在最后做一些事情,但这很容易)

我需要在 shell 脚本中执行此操作,但我不是 Linux 专家,使用 sed 还是 awk 更好(而且文件大小可能很大,如 4GB)?我知道这些命令的基础知识,但我不知道我是否可以在这里做我想做的事情......

谢谢!

最佳答案

如果您可以保证 ; 位于行尾,或者如果您并不真正关心具有多个 ; 的行,那么很容易解决方案(未经测试)是:

awk '/;/{ count+=1 } {print} count==100 { print "COMMIT; BEGIN"; count=0 }'

关于linux - 在文件中每第 n 次出现字符时插入内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10901745/

相关文章:

string - 从分隔的拆分字符串中删除所有子字符串匹配的高效/安全 shell 脚本?

php - 显示 Apache 当前正在运行的 php 脚本

linux - 脚本不会覆盖 csv 文件

linux - 无法加载基本命令,如 ls、touch 等。在终端

java - 如何使用 Java ProcessBuilder API 运行交互式 bash?

用于查找与文件权限相关的所需输出的 ​​Linux 脚本

.net - PowerShell 3 : Every Command Execution Results In "The type initializer [...] threw an exception" Error

android - adb shell 命令 - cd : No such file or directory

c - 确定流是否已满缓冲

linux - crontab 调度困惑