Compare 基于列的文件比较

Compare 基于列的文件比较,compare,awk,Compare,Awk,我尝试编写一个脚本,用于基于第2列比较两个大文件。每个文件包含大约100万条记录。对于输出,我需要知道哪些记录在第2列上是公共的(在两个文件上都存在),但在第1列中有不同的值。这些文件是以逗号分隔的值引用的文件 File1_pair 20151026,1111 20141113,2222 20130102,3333 77777777,9999 File2_pair 20151026,1111 20203344,2222 50506677,3333 77777777,8888 Desired

我尝试编写一个脚本,用于基于第2列比较两个大文件。每个文件包含大约100万条记录。对于输出,我需要知道哪些记录在第2列上是公共的(在两个文件上都存在),但在第1列中有不同的值。这些文件是以逗号分隔的值引用的文件

File1_pair

20151026,1111
20141113,2222
20130102,3333
77777777,9999

File2_pair
20151026,1111
20203344,2222
50506677,3333
77777777,8888

Desired_output
20141113,2222,20203344
20130102,3333,50506677
我试图修改下面的脚本,但无法正确执行

awk 'FNR==NR { a[$0]; next } !($2) in a { c++ } END { print c }' file1_pair file2_pair`

你的想法是对的,你只是在错误的领域操作

您需要保存数组中第一个文件中的所有
$2
值,然后对照该数组检查第二个文件中的
$2
值。您还需要比较相应行中
$1
的值

这个awk脚本将实现这一点

awk -F , -v OFS=, '
    NR==FNR {
        # Store the value of $1 under the $2 key in a
        a[$2]=$1
        next
    }
    # If $2 is in a (we've seen this value before) and
    # if the value in the array (first file's $1 value) doesn't match this files $1 value
    ($2 in a) && (a[$2] != $1) {
        # Print the original $1 value (from the array),$2,$1
        print a[$2],$2,$1
    }' file1_pair file2_pair

第二列中的值在两个文件之间是否完全相同?以相同的顺序,并且两个文件的每一行上都有相同的值?否,两个文件第2列中的值可以不同且顺序不同。但第2列中的值至少是唯一的?是的,第2列中的值在相同的文件行中总是唯一的,而第2列中不匹配的值将被完全忽略?或者,给定行上的文件之间的第2列匹配值是否无关紧要?(这就是为什么
7777778888
7777779999
不在输出中?@Jimbo如果它对您有效,请记住您可以接受答案。@fedorqui,谢谢提醒。对这个社区来说还是新鲜事。