从列表列表中删除重复项的最佳方法是什么?
我有很多txt
List1.txt
111
222
333
444
... List300.txt
555
666
777
888现在我有了一个新的txt List301.txt,但需要检查重复项并将其删除
List301.txt
111
666
999
aaa
bbb 我试着像这样使用set:
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中删除111和666?
谢谢~
发布于 2015-03-05 18:05:21
如果您必须将新文件(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.txthttps://stackoverflow.com/questions/28874609
复制相似问题