unix 根据前三列将每行与另一行进行比较,并仅输出一行

5anewei6  于 2022-12-12  发布在  Unix
关注(0)|答案(1)|浏览(175)

我有这样文件
第1章13369510 13369602节PRAMEF18 0 +
字符1 13369510 13369602 PRAMEF19 0 +
我想比较每一行的前三列,如果匹配,则输出如下所示
字符1 13369510 13369602 PRAMEF18,PRAMEF19 0 +

myss37ts

myss37ts1#

这应该可行:

awk 'BEGIN { FS = OFS = "\t" }
      {
        key = $1 FS $2 FS $3;
        last_fields[key] = $5 FS $6;
        lines[key] = lines[key]?lines[key] ", " $4 : $1 FS $2 FS $3 FS $4;
      }
      END {
        for (line in lines) print lines[line], last_fields[line]
      }' your_file.tsv
  • 首先使用列1、2和3作为关键字。
  • 使用col1,2,3作为关键字,创建一个包含文件所有行的字典。如果字典中已经存在关键字,则追加第4列(要合并的列)。
  • 列印

(根据Ed Morton的建议编辑了代码)

相关问题