如何基于AWK中的一列联接两个文件(使用通配符)

时间:2018-10-04 19:05:11

标签: awk

我有2个文件,我需要将文件2中的第2列与文件1中的第3列进行比较。

文件1

"testserver1","testserver1.domain.net","-1.1.1.1-10.10.10.10-"
"testserver2","testserver2.domain.net","-2.2.2.2-20.20.20.20-200.200.200.200-"
"testserver3","testserver3.domain.net","-3.3.3.3-"

文件2

"windows","10.10.10.10","datacenter1"
"linux","2.2.2.2","datacenter2"
"aix","4.4.4.4","datacenter2"

预期产量

"testserver1","testserver1.domain.net","windows","10.10.10.10","datacenter1"
"testserver2","testserver2.domain.net","linux","2.2.2.2","datacenter2"

我所能找到的所有语句仅在两列相同的情况下才有效,如果文件1的第3列包含<文件2的第2列的值

,我需要它才能起作用。

我已经尝试过了,但是同样,它仅在列相同时才起作用(我不想要):

awk 'BEGIN {FS = OFS = ","};NR == FNR{f[$3] = $1","$2;next};$2 in f {print f[$2],$0}' file1.csv file2.csv

1 个答案:

答案 0 :(得分:1)

hack!

$ awk -F'","' 'NR==FNR {n=split($NF,x,"-"); for(i=2;i<n;i++) a[x[i]]=$1 FS $2; next} 
               $2 in a {print a[$2] "\"," $0}' file1 file2

"testserver1","testserver1.domain.net","windows","10.10.10.10","datacenter1"
"testserver2","testserver2.domain.net","linux","2.2.2.2","datacenter2"

假定查找是唯一的,即file1记录在该字段中是互斥的。