次のデータファイルがあります。
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
最初の「.」をタブまたは一意の文字に置き換えるためにファイルを前処理します。