'grep:line too long'排除故障

时间:2013-07-18 16:42:08

标签: awk grep

我有一个文件必须有一个或多个"太长"其中的一行:当我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: cmd. line:1: (FILENAME=myFile FNR=1) fatal: set_record: databuf: can't allocate 2147483648 bytes of memory (Cannot allocate memory)

使用awk

awk '/myText/' myFile > out.txt

2 个答案:

答案 0 :(得分:3)

首先尝试从文件中删除所有空字节:

tr -d '\000' < fileWithNulls > noNulls

然后尝试使用noNulls文件运行grep或awk。

答案 1 :(得分:1)

如果它是二进制文件,则空字节\0的出现通常比换行\n的出现更常见。所以你可以打破空字节而不是

grep -z 'myText' myFile

或者也许是所有控制字符

tr '[:cntrl:]' '\n' < myFile | grep myText