我正在通过一些 awk 命令传递程序的输出,而且我几乎到了我需要的地方。到目前为止的命令是:
myprogram | awk '/chk/ { if ( $12 > $13) printf("%s %d\n", $1, $12 - $13); else printf("%s %d\n", $1, $13 - $12) } ' | awk '!x[$0]++'
最后一点是穷人的uniq
,我的目标没有。如果上面的命令有可能产生如下输出:
GR_CB20-chk_2, 0
GR_CB20-chk_2, 3
GR_CB200-chk_2, 0
GR_CB200-chk_2, 1
GR_HB20-chk_2, 0
GR_HB20-chk_2, 6
GR_HB20-chk_2, 0
GR_HB200-chk_2, 0
GR_MID20-chk_2, 0
GR_MID20-chk_2, 3
GR_MID200-chk_2, 0
GR_MID200-chk_2, 2
我想要的是这样的:
GR_CB20-chk_2, 3
GR_CB200-chk_2, 1
GR_HB20-chk_2, 6
GR_HB200-chk_2, 0
GR_MID20-chk_2, 3
GR_MID200-chk_2, 2
也就是说,我只想打印给定标签(第一个“字段”)具有最大值的行。上面的示例代表 at 数据,因为输出将被排序(就好像它已经通过sort
命令传递了一样)。