bash - 如果它们以相同的单词开头,如何合并两行或多行?
问题描述
我有一个这样的文件:
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 达到所需的输出?
感谢帮助!
解决方案
这是 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。
推荐阅读
- node.js - 不和谐 API | 用户标志返回徽章
- next.js - 这个 Service Worker 配置有风险吗?
- java - 如何获取与目标数组关闭子集的数组
- arrays - 如何在Python中以特定顺序将列表打印为列表列表?
- python - Django 无法呈现我的模板,因为它无法找到我的 url。这只发生在我的一个应用程序中的 url 模式
- python - Pandas 多索引日期摘要
- mysql - 在操作 SELECT 时加入表
- python - 是否可以使用多年的数据框计算每年的 beta、alpha 和 rsquared?
- assembly - 使用 ld.exe 链接到 kernel32.dll
- javascript - Vue 2 Typescript 错误:“没有重载匹配此调用”和“属性不存在”