加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – “grep -c”与“wc -l”

发布时间:2020-12-16 01:49:51 所属栏目:安全 来源:网络整理
导读:我正在处理一些大型文本文件,即.将它们从一种格式转换为另一种格式.文件的原始格式存在一些细微差别,但是 – 在少数情况下进行了一些预处理 – 它们大部分都是使用我创建的bash shellcript成功转换的. 到目前为止一切都那么好,但有一件事令我困惑.有时,脚本
我正在处理一些大型文本文件,即.将它们从一种格式转换为另一种格式.文件的原始格式存在一些细微差别,但是 – 在少数情况下进行了一些预处理 – 它们大部分都是使用我创建的bash shellcript成功转换的.

到目前为止一切都那么好,但有一件事令我困惑.有时,脚本会设置一个名为$iterations的变量,以便它知道执行特定for循环的次数.此值由脚本创建的临时文件中的空行数确定.

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

iterations=$(cat tempfile | grep '^$' | wc -l)

到目前为止,除了其中一个文本文件之外,其他所有文件都没有正常工作,它们似乎没有正确设置$iterations变量,即使在tempfile中似乎有超过20,000个空行,也给出了值’1′.

但是,在发现grep -c后,我将行改为:

iterations=$(cat tempfile | grep -c '^$')

并且剧本突然起作用,即. $iterations设置正确.

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

解决方法

如果输入不是文本文件,则grep将打印单行二进制文件(标准输入)匹配,并且wc -l将计算该行!但是grep -c会愉快地计算文件中的匹配数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读