首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Bash搜索文件

使用Bash搜索文件
EN

Stack Overflow用户
提问于 2021-03-01 23:37:57
回答 2查看 90关注 0票数 0

我有两个文本文件,一个具有唯一的IP地址列表,另一个具有较长的IP地址填充列表。我正在尝试使用bash确定唯一列表中的IP地址在较长的人口列表中显示。

到目前为止,我已经:

代码语言:javascript
复制
#!/bin/bash
    while read line; do
        grep -Ff "$line" population.txt
done < $uniqueIP.txt

脚本运行,但我没有输出。我正在努力计算发生的次数,但是有问题出现在逻辑上。目前,脚本没有输出任何内容。

示例输入:

uniqueIP.txt

代码语言:javascript
复制
192.168.1.10
192.168.1.11
192.168.1.12
192.168.1.13
192.168.1.14

population.txt

代码语言:javascript
复制
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

示例输出:

代码语言:javascript
复制
Found: 192.168.1.12
Found: 192.168.1.14
Total: 2
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-02 00:08:19

下面是我为您的问题建议的bash函数count_unique_ips

代码语言:javascript
复制
#!/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.txtpopulation.txt获得以下输出

代码语言:javascript
复制
'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
票数 0
EN

Stack Overflow用户

发布于 2021-03-02 15:07:48

一个只使用grep的简短方法可以是

代码语言:javascript
复制
grep -Fxf uniqueIP.txt population.txt

但对于大型文件来说,这将是缓慢的。更快的方法是

代码语言:javascript
复制
sort uniqueIP.txt population.txt | uniq -d

假设population.txt中的IP在这个文件中也是唯一的,并且每行有一个IP没有额外的字符(包括空白字符)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66431243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档