将两个文件与awk匹配并输出选定字段

将两个文件与awk匹配并输出选定字段,awk,Awk,我想比较用分隔符分隔的两个文件 ; 使用相同的字段1, 文件1的输出字段2和文件2的字段2字段1 文件1: 16003-Z/VG043;204352 16003/C3;100947 16003/C3;172973 16003/PAB4L;62245 16003;100530 16003;101691 16003;144786 文件2: 16003-Z/VG043;568E;0540575;2.59 16003/C3;568E;0000340;2.53 16003/PAB4L;568H;06

我想比较用分隔符分隔的两个文件

; 
使用相同的字段1, 文件1的输出字段2和文件2的字段2字段1

文件1:

16003-Z/VG043;204352
16003/C3;100947
16003/C3;172973
16003/PAB4L;62245
16003;100530
16003;101691
16003;144786
文件2:

16003-Z/VG043;568E;0540575;2.59
16003/C3;568E;0000340;2.53
16003/PAB4L;568H;0606738;9.74
16003;568E;0000339;0.71
16003TN9/C3;568E;0042261;3.29
期望输出:

204352;568E;16003-Z/VG043
100947;568E;16003/C3
172973;568E;16003/C3
62245;568H;16003/PAB4L
100530;568E;16003
101691;568E;16003
144786;568E;16003
我的尝试:

awk -F\, '{FS=";"} NR==FNR {a[$1]; next} ($1) in a{ print a[$2]";"$2";"$3}' File1 File2 > Output
上述方法不起作用,可能是因为awk对我来说还不太清楚。 问题是什么在推动产出?什么
$1
$2
等是指什么? 我的意图中的
a[$2]
是文件1的字段2…但它不是

我得到的是:

;204352;16003-Z/VG043
;100947;16003/C3
;172973;16003/C3
;62245;16003/PAB4L
;100530;16003
;101691;16003
;144786;16003

感谢您的帮助

这可能就是您想要的:

awk -F";" '(NR==FNR) { a[$1] = ($1 in a ? a[$1] FS : "") $2; next }
           ($1 in a) { split(a[$1],b); for(i in b) print b[i] FS $2 FS $1 }' file1 file2
这将产生:

204352;568E;16003-Z/VG043
100947;568E;16003/C3
172973;568E;16003/C3
62245;568H;16003/PAB4L
100530;568E;16003
101691;568E;16003
144786;568E;16003

这种方法首先通过
将文件
file_1.txt
读入关联数组
。(这是为了关联ID / 然后,在第二个文件
file_2.txt
上循环,打印
表中与此文件的id字段匹配的值以及当前值:

BEGIN {
    FS=OFS=";"
    while (getline < first)
        table[$1] = $2 FS table[$1]
}

$1 in table {
    len = split(table[$1], parts)
    for (i=1; i<len; i++)
        print parts[i], $2, $1
}

204352;568E;16003-Z/VG043
172973;568E;16003/C3
100947;568E;16003/C3
62245;568H;16003/PAB4L
144786;568E;16003
101691;568E;16003
100530;568E;16003

$ awk -v first=file_1.txt -f script.awk file_2.txt