为什么Unix加入失败,即使两个文件中存在相应的条目

时间:2011-12-07 03:18:53

标签: unix join

我尝试了简单的连接

join query.txt source.tab

基于两个文件中的第一列。很清楚source.tab 包含查询。但为什么这个操作没有结果?

这两个查询和源文件都可以在这里下载:

http://dl.dropbox.com/u/11482318/query.txt  (2B)

http://dl.dropbox.com/u/11482318/source.tab (40KB)

2 个答案:

答案 0 :(得分:3)

join的人工页面说(如庇护所所示):

  

重要提示:必须在连接字段上对FILE1和FILE2进行排序。

在您的情况下,source.tab文件在第一个字段(r1.1,r2.1等)上自然排序。但是,连接所需的排序顺序将基于sort的整理顺序(可能是r1.1,r10.1,r100.1,r11.1,r12.1等)

如果使用sort命令对source.tab文件进行排序,然后加入,它应该可以正常工作。

(注意 - 也许幸运的是 - query.txt文件具有正确的排序顺序。)

答案 1 :(得分:1)

如果文件有标题, join 命令将不会返回结果。这会导致 join 将文件视为未排序,因此所有匹配都会失败,而不是标题中该字段的密钥。

剥离标题的一种方法是使用grep -v ",Header2," file1.txt >file2.txt然后加入到file2.txt(假设文件已经开始排序)。另一种选择是按原样排序,允许标题保留。如果标题行不会显示在最终结果中,则此方法将起作用。