Compare Txt Files in Linux and Return Elements in File 1 for Elements in File 2
Here is the problem.
- Host.txt file has only Hostnames as follows:
GVC-CH-ZRH-BRA-5H81-PELE GVC-US-NYC-9TH-4C101-MEDROOM GVC-US-NYC-9TH-4C101E-EXTRA GVC-US-NYC-9TH-5E117-STUDIO54
2.HosandIp.txt has the Hostnames and Ip as follows (HostandIP has hostname,IP Address Note the Comma (,)):
GVC-CH-ZRH-BRA-5H81-PELE,170.16.75.101 GVC-US-NYC-9TH-4C101-MEDROOM,170.26.114.242 GVC-US-NYC-9TH-4C101E-EXTRA,170.26.108.224 GVC-US-NYC-9TH-5E117-STUDIO54,170.26.108.95 beta-gvc-personal-antoniop-526,170.26.107.180 beta-gvc-personal-antoniop-9100,170.26.106.206 beta-gvc-personal-antoniop-9100b,170.26.106.41 beta-gvc-personal-antoniop-office,170.26.107.192
I need to compare these two files and get only the IP Address in another text file called IPOnly.txt
- IPOnly.txt has only the IP's common to both Host.txt and HostandIp.txt as follows:
170.16.75.101 170.26.114.242 170.26.108.224 170.26.108.95
It can be done in JAVA using HASH MAP. Is there a Linux Command to do this ? Please He开发者_运维知识库lp!
sort Host.txt -o Host_sorted.txt
sort HosandIp.txt -o HosandIp_sorted.txt
join Host_sorted.txt HosandIp_sorted.txt -t, | cut -d, -f2
The input files must be sorted. The entries aren't quite sorted in the order desired by join, therefore I've included the calls to sort to do this. Join man page
Here is my 0.02$ in perl
#!/usr/bin/perl
use strict;
use warnings;
open (HOST, '<Host.txt') || die;
open (HOSTANDIP, '<HostAndIp.txt') || die;
my %host2ip;
map { chomp; my ($h,$i) = split /,/; $host2ip{$h} = $i } (<HOSTANDIP>);
map { chomp; print "$host2ip{$_}\n" if exists($host2ip{$_}) } (<HOST>);
awk -F, '
NR == FNR {host[$1]++; next}
($1 in host) {print $2}
' Host.txt HostandIP.txt > IPOnly.txt
My take using Python:
hosts_contents = open('Host.txt', 'r').read()
hosts_and_ips_contents = open('HosandIp.txt', 'r').read()
host_ips = dict(line.split(',') for line in hosts_and_ips_contents.splitlines())
hosts_wanted = set(hosts_contents.splitlines())
print '\n'.join(ip for host, ip in host_ips.iteritems() if host in hosts_wanted)
sed -e 's/^/\^/' -e 's/$/,/' Host.txt | egrep -f - HosandIp.txt | awk -F, '{print $2}' > IPOnly.txt
one-liner:
for line in $(cat host.txt); do sed -n s/$line',\(.*\)/\1/p' host-and-ip.txt ; done > ip-only.txt
in readable form:
for line in $(cat host.txt)
do
sed -n s/$line',\(.*\)/\1/p' host-and-ip.txt
done > ipOnly.txt
加载中,请稍侯......
精彩评论