我尝试根据特定字符串删除重复的行。我的问题中有两个类似的情况。
我有这种文件:
20151222051106 http://website.org/2015-12-11-art1
20151222054115 http://website.org/2015-12-11-art1
20151222054123 http://website.org/2015-12-11-art1
20151222050165 http://website.org/2015-12-12-art2
20151222051901 http://website.org/2015-12-12-art3
20151222051120 http://website.org/2015-12-14-art4
20151222051125 http://website.org:80/2015-12-14-art4
20151222051133 https://website.org/2015-12-14-art4
首先,我想删除具有相同 URL 的行(同时保留第一行)。结果如下:
20151222051106 http://website.org/2015-12-11-art1
20151222050165 http://website.org/2015-12-12-art2
20151222051901 http://website.org/2015-12-12-art3
20151222051120 http://website.org/2015-12-14-art4
20151222051125 http://website.org:80/2015-12-14-art4
20151222051133 https://website.org/2015-12-14-art4
其次,想要根据 url 字符串的特定部分删除重复的行(保留第一行)。
根据第一个问题的结果。当几个 URL 除了“http”或“https”部分外都相同时。我只想保留第一行。
20151222051106 http://website.org/2015-12-11-art1
20151222050165 http://website.org/2015-12-12-art2
20151222051901 http://website.org/2015-12-12-art3
20151222051120 http://website.org/2015-12-14-art4
20151222051125 http://website.org:80/2015-12-14-art4
我在同一篇文章中询问这两个问题,因为它们基本上是同一个问题(并且我认为这两个问题都可以使用 sed 来完成)。
sed?没有。awk?有。
第一个问题可以这样回答
这是一个“著名”的 awk 习惯用法:过滤第二个字段 (
$2
),只打印第一次看到的行。我将向您指出stackoverflow awk 信息页面以了解详细信息。对于第二部分,我们需要细化作为数组键存储的内容:
$2
我们需要规范化方案,而不是(整个 URL):