하나의 열을 그룹화하고 다른 열의 최대값 가져오기

하나의 열을 그룹화하고 다른 열의 최대값 가져오기

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그러나 null 값을 얻습니다. 어떤 제안이라도

답변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

파이썬

 #!/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

관련 정보