[英]Match up the contents of two files
我有两个文件:一个包含一个AP名称的列表,另一个包含另一个AP名称的列表,但是这次每个AP的控制器IP都在AP名称之前列出。
文件1:
AP1
AP2
Ap3
AP4
Ap5
Ap6
...
档案2:
1.1.1.1,Ap1
2.2.2.2,Ap2
3.3.3.3,Ap3
4.4.4.4,Ap4
6.6.6.6,Ap6
...
如何将文件1中的名称与文件2中的名称进行匹配,以使输出类似于以下内容?
1.1.1.1,Ap1
2.2.2.2,Ap2
3.3.3.3,Ap3
4.4.4.4,Ap4
IP Not Found,Ap5
6.6.6.6,Ap6
我当时以为可以使用comm
命令,但是我不知道仅比较名称而不是IP的好方法。 我也可以只为每个名称使用grep,但这将永远花费(大约8,000个AP名称)。
join
命令将完成这项工作(请注意,两个文件都必须首先按AP名称排序;示例数据已经存在,但是如果您的实际数据不是,请通过sort -f
运行第一个文件,第二个文件文件通过sort -f -t , -k 2
)。
join -i -t , -1 1 -2 2 -a 1 -o 2.1,1.1 -e "IP Not Found" file1.txt file2.txt
-i
表示忽略大小写, -t ,
表示字段之间用逗号分隔, -1 1
表示在第一个文件的第一个(唯一)字段上进行连接; -2 2
表示在第二个文件的第二个字段上联接。 -a 1
表示包括第一个文件中没有任何匹配项的行。 -o 2.1,1.1
指定输出格式:第二个文件(IP)的第一个字段,然后是第一个文件(AP)的第一个字段。 -e "IP Not Found"
表示输出“未找到IP”代替空白字段。
这将输出
1.1.1.1,AP1
2.2.2.2,AP2
3.3.3.3,Ap3
4.4.4.4,AP4
IP Not Found,Ap5
6.6.6.6,Ap6
这个awk片段应该做到这一点:
awk 'BEGIN{FS=","}
(FNR==NR){a[tolower($2)]=$0}
(FNR!=NR){if (a[tolower($1)]!="")
print a[tolower($1)]
else
print "IP Not Found," $1}' file2.txt file1.txt
在您的情况下产生:
1.1.1.1,Ap1
2.2.2.2,Ap2
3.3.3.3,Ap3
4.4.4.4,Ap4
IP Not Found,Ap5
6.6.6.6,Ap6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.