我想加入两个文件并将它们编入新列的索引,如下所示:
档案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
答案 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。