テーブルファイルで複数の一致を探して2番目の列を印刷しますか?

テーブルファイルで複数の一致を探して2番目の列を印刷しますか?

私はこのようなテーブルを持っており、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の2つのファイルがマージされ、一致すると、最初のファイルの2番目のフィールドが印刷されます1.2

または以下を使用してawk

awk 'FNR==NR{a[$1]=1} FNR!=NR&&a[$1]{print $2}' file index
  • ファイルがfile配列にロードされますa
  • index2番目のファイルを処理するときは、awk最初のフィールドが配列にインデックスであることを確認してくださいa[$1]。その場合は、2番目のフィールドを印刷してください$2

関連情報