我在同一目录中有多个文件,每个文件代表一个用户,并包含用于登录此帐户的IP,每个文件都在一个新行中。
我想创建一个脚本,检查多个文件中是否出现相同的IP,当然还有打印副本。
我尝试过使用awk,但没有运气,任何帮助都表示赞赏!
答案 0 :(得分:1)
假设同一个文件上没有重复的IP地址,这应该适用于许多Bash版本中的IPv4地址:
#!/bin/bash
#For IP addresses v4, assuming no repeated IP addresses on the same file; result is stored on the file /tmp/repeated-ips
mkdir -p /tmp
grep -rhEo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /home/user/folder > /tmp/ipaddresses-holder
sort /tmp/ipaddresses-holder | uniq -d > /tmp/repeated-ips
Exit 0
下面的脚本稍微复杂一些,但无论单个文件上是否有重复的IP地址,它都会起作用:
#!/bin/bash
#For IP addresses v4, result is stored on the file /tmp/repeated-ips
mkdir -p /tmp
grep -rEo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /home/user/folder > /tmp/ipaddresses-holder
sort -u /tmp/ipaddresses-holder > /tmp/ipaddresses-holder2
grep -rhEo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /tmp/ipaddresses-holder2 > /tmp/ipaddresses-holder3
sort /tmp/ipaddresses-holder3 | uniq -d > /tmp/repeated-ips
Exit 0
在这两种情况下,结果都存储在文件/ tmp / repeated-ips
中答案 1 :(得分:0)
使用以下awk命令:
awk '$0 in a {print FILENAME, "IP:", $0, "also in:", a[$0]; next} {a[$0] = FILENAME}' /tmp/user*
假设你有像这样的IP文件
[tmp]$cat /tmp/user1
1.1.1.1
[tmp]$cat /tmp/user2
2.2.2.2
[tmp]$cat /tmp/user3
1.1.1.1
<强>输出强>
[tmp]$awk '$0 in a {print FILENAME, "IP:", $0, "also in:", a[$0]; next} {a[$0] = FILENAME}' /tmp/user*
/tmp/user3 IP: 1.1.1.1 also in: /tmp/user1
<强>解释强>
awk '
$0 in a { # if IP already exists in array a
print FILENAME, "IP:", $0, \ # print the output
"also in:", a[$0];
next; # get the next record without further
} # processing
{a[$0] = FILENAME} # if reached here, then we are seeing IP
' # for the first time, so store it
答案 2 :(得分:0)
我不确定我是否正确理解了您的问题,所以我想您想做什么:
你有几个文件。每个文件引用一个特定用户,并记录该用户用于登录的每个IP地址。例如:
$ cat alice.txt
192.168.1.1
192.168.1.5
192.168.1.1
192.168.1.1
$ cat bob.txt
192.168.0.1
192.168.1.3
192.168.1.2
192.168.1.3
$ cat eve.txt
192.168.1.7
192.168.1.5
192.168.1.7
192.168.0.7
您想知道多个文件中是否显示相同的IP地址。
这是我想出的。
#!/usr/bin/env bash
SEARCH_TERMS="search_terms.txt"
for source_file in $@
do
for search_term in $(sort -u $source_file)
do
found=$(grep -F "${search_term}" $@ --exclude=${source_file})
if [[ -n "${found}" ]]; then
echo "Found ${search_term} from ${source_file} also here:"
echo ${found}
fi
done
done
这可能不是最佳解决方案。
答案 3 :(得分:0)
如下:
class MyApp : App() {
override val primaryView = LoginScreen::class
}
换句话说,连接和排序的所有文件之间的差异,以及连接,排序和删除重复项的所有文件之间的差异。