2つの列に基づいてソートし、作成された各グループの一番上の行を維持するにはどうすればよいですか?

2つの列に基づいてソートし、作成された各グループの一番上の行を維持するにはどうすればよいですか?

次の形式の2つのcsvファイルがあります。

column1,column2,user,column4,column5,column...column14  

ユーザーを最初のキーでファイルをソートし、タイムスタンプを表す数字の列14に基づいて降順にソートしたいと思います。

結果は次のとおりです。

ファイル1:

A,AA,jim,XX,YY,....,1485771395    
A,AA,jim,XX,YY,....,1485771395    

など

その後、このファイル内の各クラスタの最初の行だけを維持したいと思います。

A,AA,jim,XX,YY,....,1485771395  

どうすればいいですか?

修正する:
入力例:

"1/30/2017 11:14:55 AM",Valid customer,jim.smith,NY,1485771295      
"1/26/2017 5:06:11 AM",New customer,john.doe,CA,1485403571  
"1/26/2017 8:02:01 PM",Valid customer,jim.smith,NY,1485457321  
"1/30/2017 4:14:30 AM",New customer,tim.jones,CO,1485746070  
"1/30/2017 11:09:36 AM",New customer,tim.jones,CO,1485770976  
"1/30/2017 11:14:50 AM",Valid customer,jim.smith,NY,1485771290      
"1/22/2017 11:51:51 AM",New customer,tim.jones,CO,1485082311  

最後の列は最初の列の時代なので、文字列ではなく数字を使用して行を並べ替えることができます。
したがって、予想される出力は次のようになります。
a)名前とタイムスタンプに基づいて逆順に並べ替えると、次のような結果が得られます。

"1/30/2017 11:14:55 AM",Valid customer,jim.smith,NY,1485771295    
"1/30/2017 11:14:50 AM",Valid customer,jim.smith,NY,1485771290        
"1/26/2017 8:02:01 PM",Valid customer,jim.smith,NY,1485457321  
"1/26/2017 5:06:11 AM",New customer,john.doe,CA,1485403571  
"1/30/2017 11:09:36 AM",New customer,tim.jones,CO,1485770976  
"1/30/2017 4:14:30 AM",New customer,tim.jones,CO,1485746070  
"1/22/2017 11:51:51 AM",New customer,tim.jones,CO,1485082311  

jim.smithしたがって、最後の列に基づいて逆順にソートされた行クラスターがありtim.jones(つまり、最初の行の最も遅い日付がクラスターの最初の日付である)、john.doeその行のレコードは1つだけです。

その後、各クラスタの最初の行だけを維持したいと思います。つまり

"1/30/2017 11:14:55 AM",Valid customer,jim.smith,NY,1485771295    
"1/26/2017 5:06:11 AM",New customer,john.doe,CA,1485403571    
"1/30/2017 11:09:36 AM",New customer,tim.jones,CO,1485770976  

答え1

与えられたファイルinput

"1/30/2017 11:14:55 AM",Valid customer,jim.smith,NY,1485771295      
"1/26/2017 5:06:11 AM",New customer,john.doe,CA,1485403571  
"1/26/2017 8:02:01 PM",Valid customer,jim.smith,NY,1485457321  
"1/30/2017 4:14:30 AM",New customer,tim.jones,CO,1485746070  
"1/30/2017 11:09:36 AM",New customer,tim.jones,CO,1485770976  
"1/30/2017 11:14:50 AM",Valid customer,jim.smith,NY,1485771290      
"1/22/2017 11:51:51 AM",New customer,tim.jones,CO,1485082311  

それから

sort -t, -k3,3 -k5,5rn input | awk -F, '!seen[$3]++'
"1/30/2017 11:14:55 AM",Valid customer,jim.smith,NY,1485771295      
"1/26/2017 5:06:11 AM",New customer,john.doe,CA,1485403571  
"1/30/2017 11:09:36 AM",New customer,tim.jones,CO,1485770976  

答え2

そしてgnu datamash:

datamash -t, -s -f -g 3 max 5 <infile

ただし、実行する前に、入力の各行からすべての末尾のスペースを削除する必要があります。 2つの配列
のみを使用してください。awk

awk -F, '!z[$3]{x[$3]=$0;z[$3]=$5;next}$5>z[$3]{x[$3]=$0}
END{for (i in z){print x[i]}}' infile

関連情報