1

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

1.txt 包含有效行。

例如。

1 2 1 2 
1 3 1 3

在 2.txt 我有一个额外的 coloum,但如果你忽略它,我有一些有效的行和一些无效的行。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 看起来像这些......

有效的.txt:

1 2 1 2 1
1 3 1 3 2

和 invalid.txt :

2 3 2 3 2

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

4

1 回答 1

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
于 2013-04-25T17:01:33.023 回答