sed 无法处理大型文件。还有其他选项可用吗?

sed 无法处理大型文件。还有其他选项可用吗?

当文本字符串匹配时,尝试在 UNIX 中的大型文件上插入换行符。任何大小在 1GB 或更小的文件都可以。任何超过该大小的文件都无法完成替换。它似乎什么也没做。

我正在使用以下命令:

sed -i 's/"sourceSystemCode": "xyz"}{"active": true/"sourceSystemCode": "xyz"}\n{"active": true/g' filename.txt

我甚至尝试过:

sed 's/"sourceSystemCode": "xyz"}{"active": true/"sourceSystemCode": "xyz"}\n{"active": true/g' filename.txt > newfile.txt

非常感谢您对使用 sed 的其他命令或语法添加换行符的任何其他建议。

答案1

我在这里看到了一个答案 https://stackoverflow.com/questions/48388833/sed-not-working-on-large-file-looking-for-other-options

Perl 允许您将输入分隔符 ($/) 从换行符更改为其他字符。您可以利用这一点来获得一些方便的分块。

perl -pe'BEGIN{$/="}"}s/^({"seq_id")/\n$1/' my_giant_json.json 将输入分隔符设置为“}”。然后它会查找以 {"seq_id" 开头的块,并在其前面加上换行符。

请注意,它在开头放置了一个不必要的空行。您可以使程序复杂化以消除该空行,或者在之后手动将其删除。

如果您搜索问题的第一句话,您还会发现很多其他想法。

相关内容