2つのファイル(列が2つのファイルと列が3つのファイル)のデータを比較します。

2つのファイル(列が2つのファイルと列が3つのファイル)のデータを比較します。

2つのファイルがあります。

ファイル1:

Chromosome   Position
Chr1    5242097
Chr1    4876397
Chr1    9474943
Chr1    8494518
Chr1    39872693
Chr1    9445153
Chr1    23044399
Chr1    8018859
Chr1    9474943
Chr1    42380010
Chr1    9474943
Chr1    22677151
Chr1    23044399
Chr1    42380010

ファイル2:

Chr1    1   0
Chr1    2   0
Chr1    3   0
Chr1    4   0
Chr1    5   0
Chr1    6   0
Chr1    7   0
Chr1    8   0
Chr1    9   0
Chr1    10  0
Chr1    11  0
Chr1    12  0
Chr1    13  0
Chr1    14  0
Chr1    15  0
Chr1    16  0
Chr1    17  0
Chr1    18  0
Chr1    19  0
Chr1    20  0
Chr1    21  0
Chr1    22  0
Chr1    23  0
Chr1    24  0
Chr1    25  0
Chr1    26  0
Chr1    27  0
Chr1    28  0
Chr1    29  0
Chr1    30  0
Chr1    31  0
Chr1    32  0
Chr1    33  0
Chr1    34  0
Chr1    35  0
Chr1    36  0
Chr1    37  0
Chr1    38  0
Chr1    39  0
Chr1    40  0
Chr1    41  0
Chr1    42  0
Chr1    43  0
Chr1    44  0
Chr1    45  0
Chr1    46  0
Chr1    47  0
Chr1    48  0
Chr1    49  0
Chr1    50  0

File2は容量がかなり大きく、全体の内容を示していません。この数字は6桁以上に増えることがあります。

file1の2番目の列と一致する場合は、file2から3番目の列を取得したいと思います。

私はPerlプログラムを書いたが、非常に遅かった。私はこれを行うための簡単な方法を探しています。 Grepも非常に遅いです。

ベストアンサー1

私は書くことができます

awk '
    # store column 2 from the first file
    NR == FNR {pos[$2] = 1; next}

    # from the second file, print the 3rd field if it occurred in file1
    $3 in pos {print $3}
' file1 file2

おすすめ記事