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

kul*_*lfi 1 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
Run Code Online (Sandbox Code Playgroud)

尝试:

在下面尝试但没有用。

$ awk '{print $NF;$0}' hwversion
Run Code Online (Sandbox Code Playgroud)

或者

$ awk '{if (print $NF|"sort -u"), print $0}' hwversion
Run Code Online (Sandbox Code Playgroud)

预期的:

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
Run Code Online (Sandbox Code Playgroud)

Rav*_*h13 6

使用您显示的示例,请尝试执行以下操作。这将根据最后一列获得第二列的最大值,它还将保留第二列与最后一列相同的多次出现(如果第二字段中的最大值与最后一列的多于 1 行相同)。

awk '
FNR==1{
  print
  next
}
{
  arr[$NF]=(arr[$NF]>=$2?arr[$NF]:$2)
  val[$NF,$2]=(val[$NF,$2]?val[$NF,$2] ORS:"")$0
}
END{
  for(key in arr){
    print val[key,arr[key]] | "sort -k" NF "r"
  }
}
'  Input_file
Run Code Online (Sandbox Code Playgroud)


anu*_*ava 6

这是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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

  • 也可以单读! (2认同)