【发布时间】:2015-08-03 11:21:46
【问题描述】:
我有一个文件,其中必须包含一个或多个“太长”行:当我 grep 它时,我得到了
grep: line too long
有a number of posts on this site 推荐替代方案,但没有一个对我有用。我有什么方法可以识别和消除文件中的长行,或者有什么策略可以将文件分成较小的文件以尝试隔离过长的行?
这是我根据其他帖子尝试过的命令示例:
$ cat myFile | grep -no 'myText' > out.txt
$ grep 'myText' myFile > out.txt
该文件的大小为 3367005608,这可能仅与我最初尝试使用 zgrep 时相关,但遇到了同样的问题。我收到以下错误
当使用awk时
awk '/myText/' myFile > out.txt
【问题讨论】:
-
我不知道它会更好 - 它可能有类似的行长度限制 - 但您可以尝试
awk '/myText/' myFile作为grep的替代品...另外,用于故障排除目的:awk 'length() > 1000 { print NR, length(); }将为您提供超过指定阈值的任何行的行号和长度... -
@twalberg 我已经更新了我的问题——
awk似乎也有行或文件大小的问题。 -
我猜你的文件不包含换行符,所以 awk 和 grep 都不能一次工作一行,而是必须尝试将整个文件读入内存。文件中是否还有其他字符可以被 awk 用来将其分隔为“记录”?
-
@EdMorton 该文件是一个
gunzippedgz日志文件,应该是人类可读的(只是很大)。当tailing 它看起来不错,但是当lessing 它时,我会提示"myFile" may be a binary file. See it anyway?。我可以打开它,但顶部都是^@^@^@^@^@^@^@^@^s。底部没问题。因此,这似乎是由于文件损坏造成的。我之前使用过tail,所以没有意识到发生了损坏。 -
我的计划是拆分文件并开始消除损坏的部分。不过遇到
split: xae: No space left on device,所以我得看看如何获得更多空间。