3

我有一个文件,其中必须包含一个或多个“太长”行:当我grep得到它时

grep: line too long

这个网站上有很多推荐替代品的帖子,但没有一个对我有用。我有什么方法可以识别和消除文件中的长行,或者有一种将文件分成较小文件以尝试隔离过长行的策略?

这是我根据其他帖子尝试过的命令示例:

$ cat myFile | grep -no 'myText' > out.txt
$ grep 'myText' myFile > out.txt

该文件的大小为 3367005608,这可能仅与我最初尝试使用的相关zgrep,但遇到了相同的问题。我收到以下错误

awk:命令。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
4

2 回答 2

3

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

tr -d '\000' < fileWithNulls > noNulls

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

于 2013-07-18T18:52:41.360 回答
1

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

grep -z 'myText' myFile

或者可能是所有控制字符

tr '[:cntrl:]' '\n' < myFile | grep myText
于 2013-07-18T17:30:04.933 回答