加入文件并创建索引

时间:2012-11-06 20:46:36

标签: linux join indexing

我想加入两个文件并将它们编入新列的索引,如下所示:

档案A

apple     1 2 3 4 5 6
banana    3 2 4 4 5 6
orange    2 3 4 5 6 7
pear      2 4 5 6 3 5

档案B

apple    1 3 4 5 6 7
grapes   4 5 6 4 3 6
melon    3 4 5 2 5 1
orange   2 4 5 6 7 8

我想基于前两列比较两个文件,并从文件A输出公共行,然后从文件A和文件B中添加唯一行并将其编入索引,如下所示

输出:

apple     1 2 3 4 5 6 both
orange    2 3 4 5 6 7 both
banana    3 2 4 4 5 6 fileA
pear      2 4 5 6 3 5  fileA
grapes   4 5 6 4 3 6   fileB
melon    3 4 5 2 5 1   fileB

1 个答案:

答案 0 :(得分:0)

comm比较两个文件并报告哪一行出现在一个,另一个或两者中:

comm -2 <(cut -f1 -d' ' fileA | sort)
        <(cut -f1 -d' ' fileB | sort) \
  | sed $'/\t/{s/$/ both/;s/\t//};/ /!s/$/ fileA/' \
  | join -o1.1,2.2,2.3,2.4,2.5,2.6,2.7,1.2 - fileA \
  | sort -k8
cut -f1 -d' ' fileA \
  | grep -vFf- fileB \
  | sed 's/$/ fileB/'

如您所见,管道非常复杂。如果您打算对代码进行更改,请考虑使用更强大的语言,如Perl。