我有一个很大的文件a(由电子邮件组成),每封邮件一行。我还有另一个文件B,其中包含另一组邮件。

我将使用哪个命令从文件A中删除文件B中出现的所有地址。

因此,如果文件A包含:

A
B
C

文件B包含:

B    
D
E

那么文件A应该剩下:

A
C

现在我知道这是一个可能经常被问到的问题,但我只在网上找到一个命令,它给我一个错误的分隔符。

任何帮助都将不胜感激!肯定有人会想出一个聪明的俏皮话,但我不是shell专家。


当前回答

删除出现在另一个文件上的行后获取该文件

comm -23 <(sort bigFile.txt) <(sort smallfile.txt) > diff.txt . com

其他回答

如果文件已经排序(在你的例子中):

comm -23 file1 file2

-23抑制两个文件中的行,或仅在文件2中。如果文件没有排序,那么首先将它们通过sort管道…

点击这里查看手册页

删除出现在另一个文件上的行后获取该文件

comm -23 <(sort bigFile.txt) <(sort smallfile.txt) > diff.txt . com

这是一个使用grep和lynx输出网站并删除导航元素的一行程序!你可以用cat FileA替换lynx,用FileB替换unwanted-elements.txt。

lynx -dump -accept_all_cookies -nolist -width 1000 https://stackoverflow.com/ | grep -Fxvf unwanted-elements.txt

另一种方法来做同样的事情(也需要排序输入):

join -v 1 fileA fileB

在Bash中,如果文件没有预先排序:

join -v 1 <(sort fileA) <(sort fileB)

您可以这样做,除非您的文件已排序

diff file-a file-b --new-line-format="" --old-line-format="%L" --unchanged-line-format="" > file-a

——new-line-format用于文件b中但不在文件a中的行 ——老. .是在文件a中但不在文件b中的行吗 ——不变. .是同时存在于两者中的行。 %L使行被精确地打印出来。

man diff

欲知详情