我有两个文件input1.txt和input2.txt。
input1.txt包含以下详细信息:
abcd.net
bcad.net
cagh.net
degh.net
usna.net
input2.txt有以下详细信息:
abcd.net 169.254.0.2
bcad.net 169.254.0.3
cagh.net 169.254.0.4
us-1212-qwe.net 169.254.232.50
us-cisco.net 10.120.2.3
degh.net 169.254.0.5
usna.net 169.254.0.6
ab1234.net 169.254.0.7
catorr.net 169.254.0.8
我需要从“input2.txt”文件中获取“input1.txt”中列出的服务器的相应IP详细信息
输出应该是这样的:
abcd.net 169.254.0.2
bcad.net 169.254.0.3
cagh.net 169.254.0.4
degh.net 169.254.0.5
usna.net 169.254.0.6
我的代码如下所示无法正常工作。请帮忙。
for i in `cat input1.txt`; do more input2.txt | grep -w "^$i"; done
答案 0 :(得分:2)
awk 'FNR==NR{ip[$1]=$2} FNR!= NR {print $1, ip[$1]}' input2.txt input1.txt
这将读取input2.txt并构建一个由第一列索引的所需数据的数组。然后它读取intput1.txt,并且每行打印主机和数组中的数据。
请注意,上面给出的答案不再适用,因为问题已被编辑。对于编辑过的问题,您可以执行以下操作:
awk 'FNR==NR{ip[$1".net"]=$2} FNR!= NR {print $1, ip[$1]}' input2.txt input1.txt
但这不是最好的通用解决方案。 (例如,硬编码文本“.net”是一种可怕的方法,但对于快速破解,这很好。)
答案 1 :(得分:1)
awk
join <(sort input1) <(sort input2)
abcd.net 169.254.0.2
bcad.net 169.254.0.3
cagh.net 169.254.0.4
degh.net 169.254.0.5
usna.net 169.254.0.6
或好老grep
grep -f input1 input2
abcd.net 169.254.0.2
bcad.net 169.254.0.3
cagh.net 169.254.0.4
degh.net 169.254.0.5
usna.net 169.254.0.6