Linux 如何查找另一个文件中缺少的行
关于Linux-box 我有一个文件如下 A.txtLinux 如何查找另一个文件中缺少的行,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--更改的组格式='% 未测试,请尝试一下如果文件按照示例
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