gpt4 book ai didi

linux - 在一个巨大的文件中迭代很长的行

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:35 26 4
gpt4 key购买 nike

我是 shell 脚本的新手。我正在尝试使用 shell 脚本遍历 linux 环境中的日志文件。这是我的代码:

while read p; do
head=${p:0:250}
#some code here#
done < ./log.txt

我只将前 250 个字符放入变量中以在循环中处理它。日志文件中的行可能很大,文件本身将近 5 GB。当我在几个示例行上运行上面的代码时,出现以下错误:

 xrealloc: cannot allocate 18446744071562068080 bytes (36864 bytes allocated)

有没有一种方法可以在迭代时只获取行的一部分而不是整行?还是有其他更好的方法来实现我想要做的事情?

编辑:当我使用 -x 运行脚本时,我看到脚本在 read p 处停止了一段时间,然后我收到了错误消息。我认为它试图在继续之前加载整行,这是导致问题的原因。

我将前 250 个字符分配给一个变量 ($head),这样我可以稍后将该变量拆分为一个数组并在遍历该数组时执行一些操作。只要我可以访问该行的前 250 个字符,我就不需要该变量。

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

最好在进入 shell 循环之前将内容缩减到每行的前 250 个字符。你可以做到这一点,同时仍然保留循环内变量设置的状态,通过 process substitution :

#!/usr/bin/env bash

while IFS= read -r p; do
: put your code for processing "$p" here
done < <(cut -c -250 ./log.txt)

参见 BashFAQ #1讨论 IFS=read -r 的原因,以及 BashFAQ #24在此处了解有关流程替代为何有益的更多详细信息。

关于linux - 在一个巨大的文件中迭代很长的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51044868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com