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