首页 > 解决方案 > 删除包含 2 个单词的重复行

问题描述

我有一个文件,其中保存了我的 newdir 和完成目录:

newdir 26.01.2020_17:28 Directory1
finish 26.01.2020_17:28 Directory1
newdir 26.01.2020_17:29 Directory2
finish 26.01.2020_17:29 Directory2
newdir 26.01.2020_17:28 Directory3
finish 26.01.2020_17:28 Directory4
newdir 26.01.2020_17:29 Directory5
finish 26.01.2020_17:29 Directory3
newdir 26.01.2020_17:28 Directory6
finish 26.01.2020_17:28 Directory6
newdir 26.01.2020_17:29 Directory7
finish 26.01.2020_17:29 Directory7
newdir 26.01.2020_17:28 Directory8
finish 26.01.2020_17:28 Directory9
newdir 26.01.2020_17:29 Directory10
finish 26.01.2020_17:29 Directory11

我想删除目录名称和 newdir 并完成匹配的所有位置。或者换一种说法:目录名称是否与 newdir 协商并完成,然后在文件中将其删除

示例: Directory2 具有 newdir 并完成,然后在文件中将其删除

newdir 26.01.2020_17:29 Directory2
finish 26.01.2020_17:29 Directory2

不幸的是我没有办法解决..有人可以帮助我吗?

谢谢。

问候

编辑:文件中的预期结果:

finish 26.01.2020_17:28 Directory4
newdir 26.01.2020_17:29 Directory5
newdir 26.01.2020_17:28 Directory8
finish 26.01.2020_17:28 Directory9
newdir 26.01.2020_17:29 Directory10
finish 26.01.2020_17:29 Directory11

标签: bash

解决方案


我会这样做,但 awk 也可能是一个好方法。

sort -k3 dirlist | uniq -u -f2

它将按第 3 列对文件 dirlist 进行排序,并根据第 3 列仅获取唯一行。

输出

newdir 26.01.2020_17:29 Directory10
finish 26.01.2020_17:29 Directory11
finish 26.01.2020_17:28 Directory4
newdir 26.01.2020_17:29 Directory5
newdir 26.01.2020_17:28 Directory8
finish 26.01.2020_17:28 Directory9

编辑

使用 awk(这也将保留顺序)

awk '{seen[$3]++; line[++count]=$0; key[count]=$3}
    END{
    for(i=1; i <= count; i++)
        if(seen[key[i]] == 1)
            print line[i]
    }' dirlist

推荐阅读