将文件的几列与另一个文件的列进行比较

时间:2013-04-25 16:44:27

标签: shell sed awk diff uniq

我有两个数据文件1.txt和2.txt

1.txt包含有效行。

例如。

1 2 1 2 
1 3 1 3

在2.txt中我有一个额外的颜色,但如果你忽略它,我有一些有效的行,并且几行无效。在2.txt

中可能会出现多次相同的行

例如:

1 2 1 2 1.9
1 3 1 3 3.4
1 3 1 3 3.4
2 3 2 3 5.6
2 3 2 3 5.6

第二行和第三行相同且有效。

第四行和第五行也相同但无效。

我想编写一个shell脚本来比较这两个文件并输出两个文件,valid.txt和invalid.txt看起来像这样...

valid.txt:

1 2 1 2 1
1 3 1 3 2

和invalid.txt:

2 3 2 3 2

valid.txt和invalid.txt的最后一个额外列包含该行在2.txt中重复的次数。

1 个答案:

答案 0 :(得分:1)

这个awk脚本适用于示例数据:

 awk 'NR==FNR{sub(/ *$/,"");a[$0]++;next}
        {sub(/ [^ ]*$/,"")
         if($0 in a)
                 v[$0]++
         else 
                 n[$0]++
        }
        END{
            for(x in v)print x,v[x] > "valid.txt"
            for(x in n) print x,n[x] >"inv.txt"
        }' file1 file2

输出:

kent$  head inv.txt valid.txt
==> inv.txt <==
2 3 2 3 2

==> valid.txt <==
1 3 1 3 2
1 2 1 2 1