根据shell脚本

时间:2017-11-07 22:02:16

标签: shell

我正在尝试从Inputfile.txt中删除重复项。基于某些字段应用重复逻辑。例如, 911548.PP.K 包含这些字段为重复 5319,4790,10 / 03/2017 - 它有三个记录,我们需要删除三个最后一个字段的日期更短。根据此记录,2017年4月10日需要删除并保持更长的日期。在这种情况下,911548.PP.K有两个具有相同更大日期的记录,因此选择其中一个。

我还有其他情况,下面的脚本失败,这个键有154610.PP.K两个记录,但我们正在检查的字段重复它的不同。例如:

154610 5643,1293,10/03/2017 and
154610 9835,83932,10/03/2017

在这种情况下,它应该删除记录,因为重复的字段不匹配,所以这些密钥不被视为重复记录。

但是下面的shell命令正在考虑这也是重复记录,如何解决这个问题?

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

1 个答案:

答案 0 :(得分:0)

在awk中使用多维数组

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

这会使行的顺序变得混乱。是否有一个键可以用?重新排序输出?