首页 > 解决方案 > 使用 grep 计算出现的总数并输出找到的行

问题描述

grep在 Bash 循环中使用工具来计算在总体中找到的唯一值的数量,但我也想输出找到的行。

目前我在循环中运行以下命令:

n=$(grep -o -i ${uniqueVal} ${population} | wc -l)
total+=n

但是,这仅输出发现它不输出匹配行的出现次数。有没有办法在仅将匹配项输出到屏幕时计算出现次数?

唯一值

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5

人口

192.168.1.4
192.168.1.1
192.168.1.88
192.168.1.77
192.168.1.72
192.168.1.66
192.168.1.55
192.168.1.32
192.168.1.22
192.168.1.24
192.168.1.98
192.168.1.99

输出Total Unique Found: 2

我希望 Desired Output 显示找到的行population,然后显示找到的总数。

Found: 192.168.1.4
Found: 192.168.1.1
Total Unique Found: 2

标签: bashgrep

解决方案


添加 -ne 标志以获取行号,以及tee /dev/stderr打印结果输出

grep -o -i ${uniqueVal} ${population} -ne | tee /dev/stderr | wc -l

如果要打印带有${population}内部${population}文件的行以及找到的行数,那么我会使用awk,您可以使用以下内容:

awk '/${population}/' ${uniqueVal} | tee /dev/stderr | wc -l

推荐阅读