我有一个文件必须有一个或多个"太长"其中的一行:当我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
答案 0 :(得分:3)
首先尝试从文件中删除所有空字节:
tr -d '\000' < fileWithNulls > noNulls
然后尝试使用noNulls
文件运行grep或awk。
答案 1 :(得分:1)
如果它是二进制文件,则空字节\0
的出现通常比换行\n
的出现更常见。所以你可以打破空字节而不是
grep -z 'myText' myFile
或者也许是所有控制字符
tr '[:cntrl:]' '\n' < myFile | grep myText