“grep -c”与“wc -l”

时间:2017-04-18 16:39:32

标签: bash grep wc

我正在处理一些大型文本文件,即。将它们从一种格式转换为另一种格式。文件的原始格式存在一些细微差别,但是 - 在少数情况下进行了一些预处理 - 它们大部分都是使用我创建的bash shellcript成功转换的。

到目前为止一切顺利,但有一件事令我困惑。有时,脚本会设置一个名为 iterations=$(cat tempfile | grep '^$' | wc -l) 的变量,以便它知道执行特定for循环的次数。此值由脚本创建的临时文件中的空行数确定。

因此,我脚本的原始版本包含以下行:

$iterations

到目前为止,除了其中一个文本文件之外,其他方法都运行良好,似乎没有正确设置tempfile变量,即使看起来超过20,000,也会给出值“1” grep -c中的空行。

然而,在发现 iterations=$(cat tempfile | grep -c '^$') 后,我将该行改为:

$iterations

并且脚本突然工作,即。 wc -l设置正确。

有谁可以解释为什么这两个版本产生不同的结果?为什么第一个版本适用于某些文件而不适用于其他文件?是否有一些上限值,{{1}}默认为1?不适用于第一个版本的文件是最大的文件之一,但不是集合中最大的 (第一次正确转换)。

1 个答案:

答案 0 :(得分:7)

如果输入不是文本文件,那么grep将打印单行Binary file (standard input) matcheswc -l将计算该行!但grep -c会愉快地计算文件中的匹配数。

相关问题