【问题标题】:Linux: check duplicate from a list of txtLinux:从 txt 列表中检查重复项
【发布时间】:2015-03-05 09:44:12
【问题描述】:

从列表中删除重复项的最佳方法是什么?

我有很多txt

List1.txt   
111  
222  
333  
444  
...  

List300.txt  
555  
666  
777  
888

现在我有一个新的 txt List301.txt 但需要检查重复并删除它

List301.txt  
111  
666  
999  
aaa  
bbb  

我试图使用这样的集合:

cat List* |sort |uniq -u |xargs -i grep {} List* > ListFinal.txt  
List1.txt:222  
List1.txt:333  
List1.txt:444  
List300.txt:555  
List300.txt:777  
List300.txt:888  
List3.txt:999  
List3.txt:aaa  
List3.txt:bbb

有更好的方法来仅列出999,aaa,bbb 或删除List301.txt 中的111666

谢谢~

【问题讨论】:

    标签: linux list awk grep duplicates


    【解决方案1】:

    如果您必须将新文件 (List301) 放在同一目录中,您可以使用 gawk:

    awk -v fn="f301.txt" 'FILENAME!=fn{a[$0];next}{b[$0]}
        END{for(x in b)if(!(x in a))print x}' *.txt
    

    您只需更改 fn 值即可将单行应用于您的新文件。

    如果您可以先将新文件移动到其他目录,例如new/,您可以:

    awk 'FILENAME!="new/f301.txt"{a[$0];next}!($0 in a)' *.txt new/f301.txt
    

    【讨论】:

    • 哦,太好了,让我试试,谢谢~
    • 这很好,很匹配,谢谢肯特
    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多