【问题标题】:Remove duplicate data from text file based on specific repeating crirteria根据特定的重复条件从文本文件中删除重复数据
【发布时间】:2018-09-06 13:44:33
【问题描述】:

我有一个文本文件,我想在其中删除一些行。 文件的示例内容如下--

v1 has output 1.1
v2 has output 10.2
v3 has output 5.4
v4 has output 1.1
v5 has output 10.2
v6 has output 12
------------------
and so on

正如上面看到的 1.1 和 10.2 值重复了几次,我想保留 1.1 和 10.2 的前 10 行,并且很像它们(这些值不同,并且有数百个不同的数字),但删除所有后续重复项,即使v参数的值每次都不一样,也想保留不重复的数据。

我尝试使用 uniq 进行排序,但它只会消除相同的匹配重复项,而不是基于特定条件。

sort file.txt | uniq -i

【问题讨论】:

    标签: awk sed grep


    【解决方案1】:

    听起来你只需要:

    awk '++cnt[$NF]<11' file
    

    例如

    $ cat file
    v1 has output 1.1
    v2 has output 10.2
    v3 has output 5.4
    v4 has output 1.1
    v5 has output 10.2
    v6 has output 12
    v7 has output 1.1
    v8 has output 10.2
    v9 has output 5.4
    v10 has output 1.1
    v11 has output 10.2
    v12 has output 12
    
    $ awk '++cnt[$NF]<3' file
    v1 has output 1.1
    v2 has output 10.2
    v3 has output 5.4
    v4 has output 1.1
    v5 has output 10.2
    v6 has output 12
    v9 has output 5.4
    v12 has output 12
    

    【讨论】:

      【解决方案2】:

      这是一个 awk

      awk 'a[$4==1.1 || $4==10.2]++<10 {print;next} !($4==1.1 || $4==10.2)' file
      v1 has output 1.1
      v2 has output 10.2
      v3 has output 5.4
      v4 has output 1.1
      v5 has output 10.2
      v6 has output 12
      

      它使用1.110.2 和其他所有行打印第 10 行

      【讨论】:

      • 上述问题的答案很好,但我的要求是删除重复的数字,如 1.1 和许多其他类似的数字(它们不同,有数百个数字)。我更新了这个问题,这样更容易理解。
      • @AmarjitSingh 既然你改变了问题,Eds 的答案就是你想要的。
      猜你喜欢
      • 2014-03-14
      • 1970-01-01
      • 2020-03-27
      • 2021-08-27
      • 2013-12-21
      • 2015-08-29
      • 1970-01-01
      相关资源
      最近更新 更多