Linux 如何查找另一个文件中缺少的行

Linux 如何查找另一个文件中缺少的行,linux,sed,awk,grep,Linux,Sed,Awk,Grep,关于Linux-box 我有一个文件如下 A.txt 1 2 3 4 1 2 3 6 第二个文件如下 B.txt 1 2 3 4 1 2 3 6 我想知道A.txt中的内容,但不想知道B.txt中的内容 i、 e.它应该打印值4 我想在Linux上这样做。使用diff: diff --changed-group-format='%<' --unchanged-group-format='' A.txt B.txt diff--更改的组格式='% 未测试,请尝试一下如果文件按照示例

关于Linux-box 我有一个文件如下 A.txt

1
2
3
4
1
2
3
6
第二个文件如下 B.txt

1
2
3
4
1
2
3
6
我想知道A.txt中的内容,但不想知道B.txt中的内容 i、 e.它应该打印值4

我想在Linux上这样做。

使用diff:

diff --changed-group-format='%<' --unchanged-group-format='' A.txt B.txt
diff--更改的组格式='%

未测试,请尝试一下

如果文件按照示例输入进行排序,请使用comm:

$ comm -23 A.txt B.txt
4

如果文件未排序,请参阅@Kent的awk解决方案。

您也可以使用grep通过组合
-v
(显示不匹配的行)、
-x
(匹配整行)和
-f
(从文件读取模式)选项来执行此操作:

这并不取决于文件的顺序-它将从A中删除与B中的A行匹配的任何行。

(是@rjmunro答案的补充)

为此,正确使用
grep
的方法是:

$ grep -F -v -x -f B.txt A.txt
4
如果没有
-F
标志,
grep
将从
B.txt
读取的模式解释为基本正则表达式(BRE),这在这里是不需要的,可能会导致问题
-F
标志使
grep
将模式视为一组换行符分隔的字符串。例如:

$ cat A.txt
&
^
[
]

$ cat B.txt
[
^
]
|

$ grep -v -x -f B.txt A.txt
grep: B.txt:1: Invalid regular expression

$ grep -F -v -x -f B.txt A.txt
&

我不确定
diff
是否能解决这个问题。想想在A中,我有1-10,但在B中我有9-1和100-200。所有这些都是未分类的。输出应该是10。关于这个问题,文件被排序了。它无法处理未排序的文件。您可以使用sort或任何其他shell命令对文件进行排序。不确定为什么会将其视为“不清楚”-
comm
是您要查找的命令。在这种情况下,我同意。看起来非常清晰,它有示例输入和预期输出。无法想象人们为什么投票关闭它。似乎“不清楚”被用于缺乏“不努力”的关闭。这是一个伟大的问题-它描述了我的确切问题,我可以在谷歌上轻松找到,它有我可以使用的答案。谢谢!这正是我们想要的!我认为这应该被标记为实际答案!好极了就像一个符咒,甚至不需要对行进行排序。谢谢。这显然是最好的答案。它可以写得稍微紧凑一些,如
grep-Fvx-f B.txt A.txt