我正在尝试加载和解析一个非常大的文本文件,虽然加载不是问题,但有些行有2908778个字符在单行上。这导致我的脚本出现错误。
在下面的脚本中,我删除了所有逻辑,直接读取行。我还删除了所有有效行,只留下一个文本文件中非常长的行。运行时出现以下错误:
实际脚本:
$ dowhiledebug.sh dump.txt
dowhiledebug.sh[6]: no space
Script Ended dump.txt
实际脚本:
#!/bin/sh
filename=$1
count=1
if [ -f ${filename} ]; then
echo "after then"
while read line;
do
echo "$count"
count=$((count+1))
done < $filename
else
echo "Could not open file $filename"
fi
echo "Script Ended $filename"
更新时间(2013-01-17)
wc -l
来计算文件中的行数?它不会受到 shell 的限制。我猜答案是“因为我需要进行其他处理,这些处理已被移除以便重现”。 - Jonathan Lefflerbash
3.2创建了一个没有任何换行符的4194304个字符的文件,然后bash
完全忽略了这一行。我添加了一个单独的换行符,然后bash
很高兴将整个文件都读入内存。因此,文件大小并不是硬性限制。你需要查看系统上有多少内存(我确定超过3 MiB),以及shell是否有许多巨大的变量占用了内存。 - Jonathan Lefflerecho ${.sh.version}
命令获取到值吗?如果可以,请在你的问题中包含这个信息。或者这可能是pdksh吗?祝大家好运。 - shellterecho
输出如此大的字符串,是因为echo
在Bash中是一个内置命令,因此ARG_MAX不适用于它。将echo "$(awk 'BEGIN { while (c++ < '"$(( $(getconf ARG_MAX) + 1 ))"') printf "=" }')"
与`/bin/echo "$(awk 'BEGIN { while (c++ < '"$(( $(getconf ARG_MAX) + 1 ))"') printf "=" }')"进行比较。尽管如此,我认为ARG_MAX与OP的问题无关。 - mklement0