awk按最后一列排序并打印整行

如何按排序$NF|"sort -u"然后打印整行

原始数据:

column1                 COlumn2                 column3
ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0001 1.46 Jul 25 2019 I42 v2.14 (09/05/2019)  ov0001
ov0001 1.45 Jun 27 2019 I42 v2.32 (03/09/2020)  ov0001
ov0001 1.45 Jun 27 2019 I42 v2.32 (03/09/2020)  ov0001
ov0001 1.45 Jun 27 2019 I42 v1.26 (11/14/2017)  ov0001
ov0001 1.35 Aug 14 2018 I42 v1.42 (06/20/2018)  ov0001
ov0001 1.35 Aug 14 2018 I42 v1.42 (06/20/2018)  ov0001
ov0001 1.35 Aug 14 2018 I42 v1.42 (06/20/2018)  ov0001

尝试:

在下面尝试但没有用。

$ awk '{print $NF;$0}' hwversion

或者

$ awk '{if (print $NF|"sort -u"), print $0}' hwversion

预期的:

ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0001 1.46 Jul 25 2019 I42 v2.14 (09/05/2019)  ov0001

回答

这是gnu-awk在单个命令中获取此命令的命令:

awk 'NR > 1 && (!($NF in map) || $2 > map[$NF]) {map[$NF] = $2; rec[$NF] = $0}
END {PROCINFO["sorted_in"]="@ind_str_desc"; for (i in rec) print rec[i]}' file

ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0001 1.46 Jul 25 2019 I42 v2.14 (09/05/2019)  ov0001

如果需要,您也可以获取标题行:

awk 'NR == 1 {print; next} !($NF in map) || $2 > map[$NF] {map[$NF] = $2; rec[$NF] = $0}
END {PROCINFO["sorted_in"]="@ind_str_desc"; for (i in rec) print rec[i]}' file

column1                 COlumn2                 column3
ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0001 1.46 Jul 25 2019 I42 v2.14 (09/05/2019)  ov0001

  • In a single read as well!

以上是awk按最后一列排序并打印整行的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>