【问题标题】:Remove duplicate line that contain an unknown string删除包含未知字符串的重复行
【发布时间】:2020-05-01 19:01:55
【问题描述】:

文件.txt

test (CODE:700|SIZE:2356)
asdasdad (CODE:700|SIZE:124)
xcvxcva (CODE:700|SIZE:8974)
asdavasdasdasd (CODE:700|SIZE:124)
link-categories (CODE:700|SIZE:8974)
edit (CODE:700|SIZE:124)

我需要命令获取所有重复的SIZE: 值,然后删除所有重复的行,除了一行之外,所有重复的行都有这个值,我的意思是 输出 应该是这样的:

test (CODE:700|SIZE:2356)
xcvxcva (CODE:700|SIZE:8974)
asdavasdasdasd (CODE:700|SIZE:124)

我在Remove duplicate line only contain specific string 中找到了这个命令sed '/SIZE:124/,+1 d' file.txt

但是这个命令删除了所有行,我需要的是删除除一行之外的重复行 + 这个命令不会搜索重复的 SIZE: 值,所以它不起作用!

我需要的是:

  • 搜索重复的SIZE: 值,如上面的124
  • 如果可以的话,所有行都有这个值删除它,除了一行或两行。

【问题讨论】:

  • 在这样的情况下,我们鼓励用户添加他们为解决自己的问题而付出的努力,请在您的问题中添加相同的内容,然后让我们知道。
  • awk '!seen[$2]++' file.txt

标签: awk sed grep


【解决方案1】:

也可以使用这个简单的awk 来完成:

awk -F '[ |]+' '!seen[$NF]++{print}' file

test (CODE:700|SIZE:2356)
asdasdad (CODE:700|SIZE:124)
xcvxcva (CODE:700|SIZE:8974)

【讨论】:

    【解决方案2】:

    请您尝试关注一下。

    awk 'match($0,/SIZE:[0-9]+/){val=substr($0,RSTART,RLENGTH);array[val]=$0;val=""} END{for(key in array){print array[key]}}' Input_file
    

    或添加非单线形式的解决方案:

    awk '
    match($0,/SIZE:[0-9]+/){
      val=substr($0,RSTART,RLENGTH)
      array[val]=$0
      val=""
    }
    END{
      for(key in array){
         print array[key]
      }
    }
    ' Input_file
    

    说明:为上述代码添加详细说明。

    awk '                                 ##Starting awk program from here.
    match($0,/SIZE:[0-9]+/){              ##Using match function to match regex of SIZE: then digits in each line here.
      val=substr($0,RSTART,RLENGTH)       ##Creating variable val whose value is sub string of current line which has matched value from current line.
      array[val]=$0                       ##Creating an array named array with index of variable val and value is current line.
      val=""                              ##Nullify variable val here.
    }
    END{                                  ##Starting END block of this awk program here.
      for(key in array){                  ##Traversing through array here.
         print array[key]                 ##Printing array value here.
      }
    }
    ' Input_file                          ##Mentioning Input_file name here.
    

    【讨论】:

      猜你喜欢
      • 2016-07-16
      • 2016-01-05
      • 2020-02-04
      • 2020-09-27
      • 2014-04-16
      • 2022-11-07
      • 1970-01-01
      • 2022-08-11
      相关资源
      最近更新 更多