对一列进行分组并获取另一列的最大值

对一列进行分组并获取另一列的最大值

有什么方法可以在Linux中的第一列上进行分组并在其他列上进行最大值

输入示例:

Manoj|2020-01-01 01:00:00
Manoj|2020-02-01 01:00:00
Manoj|2020-03-01 01:00:00
Rajesh|2020-01-01 01:00:00
Rajesh|2020-05-01 01:00:00
Suresh|2020-04-01 01:00:00

预期产出

Manoj|2020-03-01 01:00:00
Rajesh|2020-05-01 01:00:00
Suresh|2020-04-01 01:00:00

我尝试参考链接https://stackoverflow.com/questions/15397205/bash-script-find-max-group-by-and-sort-by-column但得到空值。任何建议

答案1

如果匹配显示的顺序,那么就这样

sort -t'|' -k1,1 -k2r file | awk -F'|' '!D[$1]++'

如果显示的顺序不重要,那么就这样

sort -r file | awk -F'|' '!D[$1]++'

在这里,AWK 命令仅显示第一个字段的第一个唯一值,因此通过排序,我们可以实现所需值是组中最高的值

答案2

你可以尝试用这个:

sort -t'|' -k2r file | sort -u -t'|' -k1,1

输出:

Manoj|2020-03-01 01:00:00
Rajesh|2020-05-01 01:00:00
Suresh|2020-04-01 01:00:00

答案3

命令

for i in `awk -F "|" '{if(!seen[$1]++)print $1}' filename`; do awk -v i="$i" '$0 ~ i {x=$0}END{print x}' filename; done

输出

Manoj|2020-03-01 01:00:00
Rajesh|2020-05-01 01:00:00
Suresh|2020-04-01 01:00:00

Python

 #!/usr/bin/python
import os
import re
z=open('outfile','w')
fin=[]
k=open('j.txt','r')
for m in k:
    d=m.split('|')[0]
    if d not in fin:
        fin.append(d.strip())

for p in fin:
    gg=[]
    g=re.compile(r'{0}'.format(p))
    y=open('j.txt','r')
    for b in y:
        if re.search(g,b):
            gg.append(b)
    z.write(gg[-1].strip())
    z.write('\n')

输出

Manoj|2020-03-01 01:00:00
Rajesh|2020-05-01 01:00:00
Suresh|2020-04-01 01:00:00

相关内容