在表格文件中查找多个匹配项并打印第二列?

在表格文件中查找多个匹配项并打印第二列?

我有一个像这样的表格,file这是我的索引:

a   X001
a   X002
a   X003
b   X002
c   X006
z   X007
z   X008
z   X001

我想根据该索引搜索以下单列文件并返回index.

a
b
z

所以该搜索的输出将是这样的:

X001
X002
X003
X002
X007
X008
X001

编辑:这是我的文件中的确切信息(每个文件的前 10 行)

指数

10803548    COG4190
10803554    COG1476
10803555    COG1192
10803559    COG3385
10803567    COG0071
10803570    COG1695
10803571    COG0467
10803573    COG3883
10803574    COG0714
10803576    COG1192

我正在搜索的文件:

10956722
11497860
11497860
11497924
11497924
11497924
11497924
11497924
11497979
11497979

此搜索的预期输出:

COG3704
COG1474
COG1474
COG2801
COG2801
COG2801
COG2801
COG2801
COG2223
COG2223

答案1

join

join -o1.2 <(sort -k1n index) <(sort -k1n file)
  • 这将在字段号 1 处合并两个文件,如果它们匹配,则打印第一个文件的第二个字段1.2

或者与awk

awk 'FNR==NR{a[$1]=1} FNR!=NR&&a[$1]{print $2}' file index
  • 该文件file被加载到一个数组中a
  • index当处理第二个文件时,awk检查第一个字段是否在数组中作为索引a[$1]。如果是,则打印第二个字段$2

相关内容