首页 > 解决方案 > 如果它们以相同的单词开头,如何合并两行或多行?

问题描述

我有一个这样的文件:

AAKRKA HIST1H1B AAGAGAAKRKATGPP
AAKRKA HIST1H1E RKSAGAAKRKASGPP
AAKRLN ACAT1 LMTADAAKRLNVTPL
AAKRLN SUCLG2 NEALEAAKRLNAKEI
AAKRLR GTF2F1 VSEMPAAKRLRLDTG
AAKRMA VCL NDIIAAAKRMALLMA
AAKRPL WIZ YLGSVAAKRPLQEDR
AAKRQK MTA2 SSSQPAAKRQKLNPA

如果它们在第一列中完全相同,我想合并 2 行。所需的输出是:

AAKRKA HIST1H1B,HIST1H1E AAGAGAAKRKATGPP,RKSAGAAKRKASGPP
AAKRLN ACAT1,SUCLG2 LMTADAAKRLNVTPL,NEALEAAKRLNAKEI
AAKRLR GTF2F1 VSEMPAAKRLRLDTG
AAKRMA VCL NDIIAAAKRMALLMA
AAKRPL WIZ YLGSVAAKRPLQEDR
AAKRQK MTA2 SSSQPAAKRQKLNPA

有时可能有超过两行以同一个单词开头。如何使用 bash/awk 达到所需的输出?

感谢帮助!

标签: bashawk

解决方案


这是 awk 中的两行代码;第一行将第二个和第三个字段存储在由第一个字段索引的关联数组中,在每个字段之前累积具有相同索引的字段,前导逗号,第二行遍历两个数组,删除输出中的前导逗号:

{ second[$1] = second[$1] "," $2; third[$1] = third[$1] "," $3 }
END { for (i in second) print i, substr(second[i],2), substr(third[i],2) }

我没有对输入或输出的顺序做出任何假设。如果要排序输出,请将输出通过sort. 您可以在以下位置运行该程序https://ideone.com/sbgLNk


推荐阅读