使用 awk 比较 2 行

使用 awk 比较 2 行

输入

aaaaa|bbbbb|ccccc|ddddd|5|5|4
aaaaa|bbbbb|ccccc|ddddd|10|10|1
wwwww|xxxxx|yyyyy|zzzzz|5|5|2
wwwww|xxxxx|yyyyy|zzzzz|10|10|2

输出

aaaaa|bbbbb|ccccc|ddddd|5|5|
wwwww|xxxxx|yyyyy|zzzzz|10|10|

用于索引的是:

第 1 至第 4 列(例如 aaaaa|bbbbb|ccccc|ddddd)

输出的逻辑如下:

  1. 比较具有相同索引的记录的最后一列,最后一列值较高的记录将打印到输出。

  2. 比较最后一列具有相同索引的记录,如果它们相等,则将第 5 列和第 6 列具有较大值的记录打印到输出中。

答案1

您只需sort相应地使用 ing 即可完成此操作,然后为每个组选择第一个条目。

sort filename -t'|' -k1,4 -k7rn -k5,6rn | sort -t'|' -k1,4 -u

结果:

aaaaa|bbbbb|ccccc|ddddd|5|5|4
wwwww|xxxxx|yyyyy|zzzzz|10|10|2

这是做什么的

  • -t'|'将字段分隔符设置为|
  • -k1,4按前 4 个字段排序
  • -k7rn然后通过第七个字段进行反向和数值比较
  • -k5,6rn然后第五场和第六场也一样
  • |将其传递给另一种类型
  • -k1,4 -u 代表-u前4个字段的唯一性

因此,整个操作就像按照您想要的方式对文件进行排序,以便您想要的行首先显示在前 4 个字段的组中。然后只需抓住每组的第一行。

相关内容