【问题标题】:Remove duplicate lines based on partial text根据部分文本删除重复行
【发布时间】:2021-09-23 17:11:03
【问题描述】:

我有一长串 URL 存储在文本文件中,我将通过这些文件进行下载。但在此之前,我想从列表中删除重复的 URL。需要注意的一点是,一些 URL 看起来不同,但实际上指向的是同一页面。 URL 中的唯一元素(除了域和路径)是查询字符串中的前 2 个参数。例如,我的文本文件如下所示:

https://www.example.com/page1.html?id=12345&key=dnks93jd&user=399494&group=23
https://www.example.com/page1.html?id=15645&key=fkldf032&user=250643&group=12
https://www.example.com/page1.html?id=26327&key=xkd9c03n&user=399494&group=15
https://www.example.com/page1.html?id=12345&key=dnks93jd&user=454665&group=12

如果在第二个查询字符串(键)之前定义了唯一 URL,则第 1 行和第 4 行是重复的。我想完全删除重复的行,所以甚至不保留一个。在上面的示例中,第 2 行和第 3 行将保留,而第 1 和第 4 行将被删除。

如何使用基本的命令行工具来实现这一点?

【问题讨论】:

    标签: linux bash unix text command-line


    【解决方案1】:

    从其他答案中缩短代码:

    awk -F\& 'FNR == NR { url[$1,$2]++; next } url[$1,$2] == 1' urls.txt urls.txt
    

    【讨论】:

      【解决方案2】:

      使用awk:

      $ awk -F'[?&]' 'FNR == NR { url[$1,$2,$3]++; next } url[$1,$2,$3] == 1' urls.txt urls.txt
      https://www.example.com/page1.html?id=15645&key=fkldf032&user=250643&group=12
      https://www.example.com/page1.html?id=26327&key=xkd9c03n&user=399494&group=15
      

      两次读取文件;第一次记录您感兴趣的位出现的次数,第二次只打印出现一次的位。

      【讨论】:

        猜你喜欢
        • 2012-07-04
        • 2021-02-24
        • 2018-02-05
        • 1970-01-01
        • 2017-08-08
        • 1970-01-01
        • 1970-01-01
        • 2014-01-09
        • 1970-01-01
        相关资源
        最近更新 更多