Parsing AWK/BASH:如何从具有已知字段范围的文件中删除重复行?

Parsing AWK/BASH:如何从具有已知字段范围的文件中删除重复行?,parsing,bash,unix,shell,awk,Parsing,Bash,Unix,Shell,Awk,我想知道是否有一种方法可以使用bash/awk删除基于已知字段范围的重复行。例如: Easy Going USA:22 May 1926 Easy Going Gordon USA:6 August 1925 Easy Life USA:20 May 1944 Easy Listening USA:14 January 2002 Easy Listening

我想知道是否有一种方法可以使用bash/awk删除基于已知字段范围的重复行。例如:

Easy Going                  USA:22 May 1926
Easy Going Gordon               USA:6 August 1925   
Easy Life                   USA:20 May 1944
Easy Listening                  USA:14 January 2002 
Easy Listening                  USA:10 October 2002 
Easy Listening                  USA:27 January 2004 
Easy Living                     USA:7 July 1937 
Easy Living                     USA:16 July 1937
Easy Living                     USA:4 September 2009
我想删除重复的移动标题。电影标题将始终从$1到$(NF-3)。理想情况下,我希望坚持第一次发生(最早的日期),但如果这不可能,那也没关系

谢谢


托梅克

这可能是一个快速的答案

sort -t':' -k1,1 -u your-file

这可能是一个快速的答案

sort -t':' -k1,1 -u your-file
这不会保留原始的行顺序。您可能需要对输出进行排序


这不会保留原始的行顺序。您可能希望对输出进行排序。

电影标题和发行日期之间的区别是什么?这是一个标签吗?电影的标题和发行日期之间有什么区别?是账单吗?不是。你把国家名
USA
作为电影名的一部分。是的,我说这是一个快速的答案,应该不是一个大问题:有来自不同国家的电影同名?可能,但不太可能。如果此数据来自IMDB转储,则这些是发布日期。不太可能。你把国家名
USA
作为电影名的一部分。是的,我说这是一个快速的答案,应该不是一个大问题:有来自不同国家的电影同名?可能但不可能。如果此数据来自IMDB转储,这些是发布日期。您将如何保留国家/地区?请使用另一个以找到的日期为键、国家/地区为值的国家/地区。您将如何保留国家/地区?请使用另一个以找到的日期为键、国家/地区为值的国家/地区。请注意,这也会忽略日期。请注意,这也会忽略日期。
$ ./shell.sh
-> Easy Living 7 July 1937
-> Easy Going Gordon 6 August 1925
-> Easy Listening 14 January 2002
-> Easy Going 22 May 1926
-> Easy Life 20 May 1944
awk '
    {
        line = $0
        $(NF-2) = $(NF-1) = $NF = ""
        if ( ! ($0 in movies)) 
            movies[$0] = line
    }
    END {
        for (m in movies) print movies[m] 
    }
' movies.txt