2017-11-07 19 views
0

重複をInputfile.txtから削除しようとしています。重複したロジックは、特定のフィールドに基づいて適用されます。たとえば、911548.PP.Kには、これらのフィールドが重複して表示されます。5319,4790,10/03/2017 - 削除する必要のある3つのレコードのうち3つがあり、最後のフィールドで日付が低くなります。このレコードごとに10/04/2017を削除し、より長い日付を保持する必要があります。この場合、911548.PP.Kには同じ日付の2つのレコードがあるため、いずれか1つを選択します。シェルスクリプトの特定のフィールドに基づいて重複レコードを削除します。

私は以下のスクリプトで失敗している他のシナリオを持っていますが、このキーには154610.PP.Kという2つのレコードがありますが、確認しているフィールドは異なっています。例えば:

この場合
154610 5643,1293,10/03/2017 and 
154610 9835,83932,10/03/2017 

重複フィールドが一致していないので、これらのキーが重複して記録として考慮していないので、それは、レコードを削除する必要があります。

しかし、以下のシェルコマンドは、これもまた重複したレコードを考慮していますが、これをどのように修正しますか? AWKで

awk -F ' |,' '{t=$NF;gsub("/","",t);if(b[$1]<t){a[$1]=$0;b[$1]=t}}END{for(x in a)print a[x]}' inputfile.txt 

はInputfile.txt

194365.PP.K 06ae6a319ec8,7012,3692,10/03/2017,7,Q,MM,f9cd8.csv,4754454,csv,,405a1.csv,4,25139,txt,10/04/2017 
911548.PP.K 876d4108-b08,5319,4790,10/03/2017,7,Q,NN,g8ijk.csv,4754454,csv,,e9051.csv,4,25139,txt,10/04/2017 
154610.PP.K 9c9d9d2a-j9k,5643,1293,10/03/2017,7,Q,PP,6001j.csv,4754454,csv,,907a1.csv,4,25139,txt,10/04/2017 
223410.PP.K ab16e77a-09j,8403,43011,10/03/2017,7,Q,OO,f2cd.csv,4754454,csv,,a97ai.csv,4,25139,txt,10/04/2017 
234173.PP.K fa180bd-81d3,4608,4697,10/03/2017,7,Q,EC,0015d8.csv,4754454,csv,,we405.csv,4,25139,txt,10/04/2017 
911548.PP.K 876d4108-b08,5319,4790,10/03/2017,7,Q,NN,g8ijk.csv,4754454,csv,,e9051.csv,4,25139,txt,10/05/2017 
911548.PP.K 876d4108-b08,5319,4790,10/03/2017,7,Q,NN,g8ijk.csv,4754454,csv,,e9051.csv,4,25139,txt,10/05/2017 
154610.PP.K 9c9d9d2a-j9k,9835,83932,10/03/2017,7,Q,PP,6001j.csv,4754454,csv,,907a1.csv,4,25139,txt,10/04/2017 

から、OutputFile.txt

194365.PP.K 06ae6a319ec8,7012,3692,10/03/2017,7,Q,MM,f9cd8.csv,4754454,csv,,405a1.csv,4,25139,txt,10/04/2017 
154610.PP.K 9c9d9d2a-j9k,5643,1293,10/03/2017,7,Q,PP,6001j.csv,4754454,csv,,907a1.csv,4,25139,txt,10/04/2017 
223410.PP.K ab16e77a-09j,8403,43011,10/03/2017,7,Q,OO,f2cd.csv,4754454,csv,,a97ai.csv,4,25139,txt,10/04/2017 
234173.PP.K fa180bd-81d3,4608,4697,10/03/2017,7,Q,EC,0015d8.csv,4754454,csv,,we405.csv,4,25139,txt,10/04/2017 
911548.PP.K 876d4108-b08,5319,4790,10/03/2017,7,Q,NN,g8ijk.csv,4754454,csv,,e9051.csv,4,25139,txt,10/05/2017 
154610.PP.K 9c9d9d2a-j9k,9835,83932,10/03/2017,7,Q,PP,6001j.csv,4754454,csv,,907a1.csv,4,25139,txt,10/04/2017 

答えて

0

使用多次元アレイ

awk -F \, '{rec[$2,$3,$4]=$0} END{for(k in rec){print(rec[k]}}' input.file 

これは行の順序を上げます。出力を並べ替えることができるキーはありますか?

+0

これらはすべてキーです194365.PP.K –

関連する問題