2番目のファイルの情報に基づいてファイルの一部の行をどのように保持しますか?

2番目のファイルの情報に基づいてファイルの一部の行をどのように保持しますか?

次のデータファイルがあります。

file1:

c1.212 3.4 90
c1.011 4.4 33
c2.09432 7.7 76
c3.0911 8.3 83
c3.1121 4.3 23
c3.2223 2.2 22
c3.1211 2.2 12
c4.1211001 1.2 11
c4.1111222 1.2 10
c4.0000011 99 76
c5.123 11 01
c5.113 11 01
...

2番目のファイルは次のとおりです。

c1.212
c3.2223
c3.0911
c5.113
...

ファイル1に示すように、最初の列の情報に基づいて5つのグループ(c1、c2、c3、c4、およびc5)があり、各グループには異なる数のサブセットがあります(たとえば、c1には2つのサブセットがあります。ただし、c2にはサブセットがあります)2番目のファイルには3つのグループ(c1、c3、およびc5)があります。私が望むのは、file2で観察されたグループとそのサブセットの両方がfile1に残り、file2で観察されなかったグループ(c1とc4)がfile1とすべてのサブセットから削除された場合です。したがって、出力は次のようになります。

output:
    c1.212 3.4 90
    c1.011 4.4 33
    c3.0911 8.3 83
    c3.1121 4.3 23
    c3.2223 2.2 22
    c3.1211 2.2 12
    c5.123 11 01
    c5.113 11 01
    ...

どんなアドバイスも本当にありがとうございます。 (実際のファイルには45,000行以上)

ベストアンサー1

joinプラス記号の使用uniq

join -t '.' -o 1.1,1.2 file1 file2 | uniq

これにより、「.」の各ファイルが「分割」されます。文字を入力し、最初のフィールドに一致する行を出力します。 "-o"オプションは、Joinにfile1の最初の2つのフィールドのみを出力するように指示します。

私は答えた後に質問を変更したので、今は動作しません。 :)sed最初の「.」をタブまたは一意の文字に置き換えるためにファイルを前処理します。

おすすめ記事