Bash 将ip地址列表与另一个具有ip地址的文件相匹配

Bash 将ip地址列表与另一个具有ip地址的文件相匹配,bash,Bash,我的任务是从另一个具有ip地址的文件中检索一长串ip地址。我创建了这个bash脚本,但效果不太好。执行脚本后,我检查名为“found”的文件,没有任何内容,当我检查名为“notfound”的文件时,大约有60个ip地址。在这两个文件中,总共必须有1500个ip地址。有两个文件;1.要检索的ip地址列表(findtheseips.txt),2。要从中检索的ip地址列表(listips.txt)。谁能帮我把它弄好吗。非常感谢你。我这样运行脚本:/script findtheseips.txt #!

我的任务是从另一个具有ip地址的文件中检索一长串ip地址。我创建了这个bash脚本,但效果不太好。执行脚本后,我检查名为“found”的文件,没有任何内容,当我检查名为“notfound”的文件时,大约有60个ip地址。在这两个文件中,总共必须有1500个ip地址。有两个文件;1.要检索的ip地址列表(findtheseips.txt),2。要从中检索的ip地址列表(listips.txt)。谁能帮我把它弄好吗。非常感谢你。我这样运行脚本:/script findtheseips.txt

 #!/bin/bash

 declare -a ARRAY
 exec 10<&0
 exec < $1
 let count=0

 while read LINE; do
 ARRAY[$count]=$LINE
 if egrep "$LINE" listips.txt; then
    echo "$LINE" >> found
   else
    echo "$LINE" >> notfound
 fi
done
#/bin/bash
声明一个数组
已找到exec 10>
其他的
回显“$LINE”>>未找到
fi
完成

无需尝试使用
exec
或创建数组

您可以
从脚本的第一个参数
$1
中读取

除非您尝试进行扩展正则表达式匹配,否则不需要使用
egrep

#!/bin/bash

while read LINE; do
    if grep "$LINE" listips.txt; then
        echo "$LINE" >> found
    else
        echo "$LINE" >> notfound
    fi
done < $1
#/bin/bash
读行时;做
如果grep“$LINE”listips.txt;然后
找到回显“$LINE”>>
其他的
回显“$LINE”>>未找到
fi
已完成<$1
这里是一个全BASH解决方案

#!/bin/bash

while read l1; do
    n=0
    while read l2; do
        if [[ $l1 == $l2 ]]; then
            echo "$l1" >> found
            ((n++))
        fi
    done < ips2
    if [ $n -eq 0 ]; then
        echo "$l1" >> notfound
    fi
done < $1
#/bin/bash
读l1时;做
n=0
阅读第二语言时;做
如果[[$l1==$l2]];然后
找到回显“$l1”>>
((n++)
fi
完成>未找到
fi
已完成<$1

您在
egrep
行中缺少一个
$
。这只是一个复制错误吗?是的,这是一个复制错误。谢谢,不,真的是巴尔马。这个脚本我必须手动输入这么多ip地址,但我认为必须有一种方法将ip地址列表读入bash,然后让脚本完成这项工作。事实上,我最终得到了一个不同的剧本。它工作得很好,但我必须手动输入每个ip地址,这是一个很长的时间。是的,实际上我正在研究这个选项现在。您建议对这两个文件进行排序,为此,我需要使用ed命令编辑文件并对ip地址进行排序。谢谢我已经更新了我的答案来展示如何使用sort命令。这很简单,每个Unix脚本编写人员都应该知道。感谢您的帮助。我试试看。可能是我把事情弄得更复杂了。谢谢你这可能会有误报。它将匹配子字符串,IPs中的
将匹配任何内容。使用
grep-x-F
而不是
egrep
。我使用
egrep
仅仅是因为它是OP使用的。无论如何,它都不会产生误报。我测试了它并更新了脚本,建议只使用
grep
。非常感谢大家。任何评论都很有帮助。我正在尝试不同的事情,我从你们身上学到了很多。谢谢你,谢谢你。为未来的人们寻找同样的答案。这个脚本对我不起作用。它只创建notfound文件,但没有找到文件,这使得此脚本不可预测。无论如何谢谢你。