awk比较两个文件并打印所有匹配和不匹配重复两个文件

时间:2016-04-19 08:55:25

标签: awk

我有两个文件

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

2 个答案:

答案 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 -------------'