我有两个文件
file1
1,DAVID
22,JACK
31,SHARON
46,SUSAN
file2
770,JACKSON
779,DAVID
776,SHARON
775,DAVID
771,SHARON
777,SUSAN
我想要将 file2与文件1中的匹配进行比较
file2可以在第2列中包含多个与name1中的colum2匹配的相同名称
我需要的输出如下
779,1
775,1
771,31
777,46
已尝试使用StackOverflow提供的示例但未获得任何输出
示例
awk -F, 'NR==FNR{a[$1]=$2;}NR>FNR{if (a[$1]==$2)print $1,${a[$2]}' file1 file2
答案 0 :(得分:0)
试试这个AWK!
BEGIN {
FS=OFS=",";
}
FNR==NR{ # make sure we are reading from file1
N[$2]=$1; # Asociative array, save values from file1
next; # to force start reading file2
}
{ # start reading from file2
for (var in N) # for each $2 in array N
# variable "var" is the index of the array N
{
if (var == $2) # if $2 from file1 match $2 from file2
{
print $1,N[var];
}
}
}
awk -f script.awk file1.txt file2.txt
779,1 776,31 775,1 771,31 777,46
结果776.31是否有任何原因不会出现在您的输出中?
答案 1 :(得分:0)
你可以在没有awk的情况下完成,仅使用sort和join:
join -t , -1 2 -2 2 -o 2.1 1.1 <(sort -t , -k 2 file1) <(sort -t , -k 2 file2)
# ^ ^ ^ ^---- select which fields to display ^ ^
# | | '--------- field in common for file2 | |
# | '-------------- field in common for file1 | |
# '------------------- field separator --------------------' |
# field used to sort the file -------------'