我有两个表格,列数和行数不同。我想查找使用公共列(B 列是公共的)的行。以下是示例。您能帮忙吗?
file1.txt
A B C D
a b c d
i ii iii iV
* ** # ##
file2.txt
E B
f ff
h b
g gg
k ii
输出:
A B C D E
a b c d h
i ii iii iV k
答案1
您可以通过构建哈希/关联数组/查找表来做这种事情,例如使用 Awk:
$ awk 'NR==FNR{B[$2]=$1; next} $2 in B {print $0,B[$2]}' file2.txt file1.txt
A B C D E
a b c d h
i ii iii iV k
还有join
命令 - 但这要求在公共字段上对输入进行排序。
答案2
要添加到@steeldriver 的答案,请使用sort
和来执行join
:
join -j 2 -o 1.1,0,1.3,1.4,2.1 <(sort -k 2 file1.txt) <(sort -k 2 file2.txt)
-j 2
告诉join
哪个字段是关键。-o
给出输出中字段的顺序,其中0
是公共键,其他为FILENUM.FIELD
。man join
详情请参阅。-k 2
告诉sort
哪个字段是关键。<( )
是bash
过程替代。
输出为:
a b c d h
A B C D E
i ii iii iV k