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!