我有两个文本文件,一个具有唯一的IP地址列表,另一个具有较长的IP地址填充列表。我正在尝试使用bash确定唯一列表中的IP地址在较长的人口列表中显示。
到目前为止,我已经:
#!/bin/bash
while read line; do
grep -Ff "$line" population.txt
done < $uniqueIP.txt脚本运行,但我没有输出。我正在努力计算发生的次数,但是有问题出现在逻辑上。目前,脚本没有输出任何内容。
示例输入:
uniqueIP.txt
192.168.1.10
192.168.1.11
192.168.1.12
192.168.1.13
192.168.1.14population.txt
192.168.1.12
192.168.1.14
192.168.1.15
192.168.1.16
192.168.1.17
192.168.1.18
192.168.1.19
192.168.1.22
192.168.1.23示例输出:
Found: 192.168.1.12
Found: 192.168.1.14
Total: 2发布于 2021-03-02 00:08:19
下面是我为您的问题建议的bash函数count_unique_ips
#!/bin/bash
function count_unique_ips()
{
local unique_ips_file=$1
local population_file=$2
local unique_ip_list=$(tr ' ' '\n' < ${unique_ips_file} | sort | uniq)
for ip in "${unique_ip_list[@]}"; do
count=$(grep -o -i ${ip} ${population_file} | wc -l)
echo "'${ip}': ${count}"
done
}
count_unique_ips uniqueIP.txt population.txt您应该根据两个给定的输入文件uniqueIP.txt和population.txt获得以下输出
'192.168.1.10': 0
'192.168.1.11': 0
'192.168.1.12': 1
'192.168.1.13': 0
'192.168.1.14': 1发布于 2021-03-02 15:07:48
一个只使用grep的简短方法可以是
grep -Fxf uniqueIP.txt population.txt但对于大型文件来说,这将是缓慢的。更快的方法是
sort uniqueIP.txt population.txt | uniq -d假设population.txt中的IP在这个文件中也是唯一的,并且每行有一个IP没有额外的字符(包括空白字符)。
https://stackoverflow.com/questions/66431243
复制相似问题