列内の値の一致

列内の値の一致

約1500行以上のタブで区切られたテキストファイルがあります。

入力.txt

id   sno1   
EN1  Nucus_2158_mri_1/2_Co_1.0_Le_3104
EN2  Nucus_2158_mri_4/2_Co_1.0_Le_3104
EN3  Nucus_2158_mri_1/2_Co_1.0_Le_3104
EN4  Nucus_2158_mri_1/2_Co_1.0_Le_3106
EN5  Nucus_2158_mri_1/2_Co_1.0_Le_3104
EN6  Nucus_2159_mri_1/2_Co_1.0_Le_3104

Nucus_{2158}_mri_{1/2}_Co_1.0_Le_{3104}角かっこ()内の値をキャプチャし、一致するIDのリストを印刷して、列(sno1)から正確に一致するものを取得したいと思います。 awk/sedのお手伝いをいただきありがとうございます。

出力.txt

Nucus_2158_mri_1/2_Co_1.0_Le_3104 EN1,EN3,EN5

ベストアンサー1

2番目の要素全体がすべての場合で同じであると仮定すると、それを連想配列のキーとして使用できます。ここawkに依存する例があります:

awk '
/^EN/ {
  if(H[$2] == "")
    H[$2] = $1
  else
    H[$2] = H[$2]","$1
}
END {
  for(key in H)
    print key, H[key]
}' infile

出力:

Nucus_2158_mri_4/2_Co_1.0_Le_3104 EN2
Nucus_2159_mri_1/2_Co_1.0_Le_3104 EN6
Nucus_2158_mri_1/2_Co_1.0_Le_3104 EN1,EN3,EN5
Nucus_2158_mri_1/2_Co_1.0_Le_3106 EN4

おすすめ記事