当我检查我的 biostar 实现的结果以在 fasta 文件中搜索素数时,我看到了一个奇怪的结果。我最初有一个 70 列的文件,并将其转换为单行有 6077828 个字符的文件。
当我使用 grep 命令时
grep -o -P -b -n CAATCGCCGT fasta.txt
它显示了我的 Biostar 实现中未显示的两个匹配项。
3:3206721:CAATCGCCGT
3:4140348:CAATCGCCGT
我和 Kate 一起在原始文件上搜索了入门书,但没有找到。由于文本的 70 列划分,引物可能会分成两行。
然后我用 div 和 mod 将它们转换为行号和列号
- 3206572 代表第 45808 行和第 12 列
- 4140199 代表第 59145 行和第 49 列
然而,底漆并不存在。
grep 可以处理的最大行数有限制吗?如果是这样,当超过限制时,结果是否可靠到限制大小?
一般来说
POSIX规范
grep
声明这意味着
grep
必须可靠地处理文本文件(“shall”表示“强制行为”)。不是文本文件的文件可能会或可能不会被可靠地处理,未指定行为。这里的“文本文件”是指[强调我的]:
{LINE_MAX}
在这里解释:所有这一切意味着一个实现可能会比给定系统
grep
处理更长的行,并且仍然可以将其称为“便携式”。可能低至2048。{LINE_MAX}
{LINE_MAX}
请记住,这不像是有人提出了规范,并且不同实现的维护者都在
grep
努力遵守。恰恰相反:已经检查了现有的主要实现,找到并记录了常见的功能集。可能需要赶上一点。有些可能更强大;有些可能从一开始就被认为是非专业的,出于任何原因能力较差,有理由不赶上。一种或另一种方式,您可以期待面向 POSIX 的操作系统
grep
(如 Linux),尤其是通过 POSIX 认证的操作系统(如 macOS),以可靠地处理不包含 NUL 字符的长达 2048 字节的行。如果可以处理更长的行,则将其视为奖励。grep
“行长有限制吗?”的一般回答。是:是的,可能有,它取决于实现;但如果有限制,则至少应为 2048 字节。较长行的行为未指定。
尤其是
你标记了 ubuntu。Ubuntu 附带 GNU
grep
。GNUgrep
声称: