如何提取具有共同列的记录?

如何提取具有共同列的记录?

我有两个表格,列数和行数不同。我想查找使用公共列(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.FIELDman join详情请参阅。
  • -k 2告诉sort哪个字段是关键。
  • <( )bash过程替代。

输出为:

a b c d h
A B C D E
i ii iii iV k

相关内容