检查文件是否包含在另一个文件中

Jim*_*Jim 6 linux bash file

我有一个文件:a.txt每行都有一个数字.我还有另一个文件b.txt,每行也有一个数字.
我如何检查文件中的所有行是否都a.txt包含在内b.txt

Ada*_*hon 5

您可以使用comm它。

如果a.txtb.txt已经排序(按词法和升序排列),则只需要

comm -23 a.txt b.txt
Run Code Online (Sandbox Code Playgroud)

或许

comm -23 a.txt b.txt | wc -l
Run Code Online (Sandbox Code Playgroud)

如果没有输出(或wc -l返回“ 0”),则in a.txt中的每一行都在in中b.txt-2抑制仅in 的行的输出b.txt-3抑制两个文件中的行的输出)。

如果文件未排序,则可以使用进程替换将每个文件的排序输出传递给comm

comm -23 <(sort a.txt) <(sort b.txt)
Run Code Online (Sandbox Code Playgroud)

进程替换<(COMMAND)将的输出COMMAND放入FIFO或/ dev / fd中的文件中(取决于系统支持的内容)。<(COMMAND)然后,在命令行上用此文件的名称替换该文件,作为命令行扩展的一部分。

这确实会检查行,因此,如果一个数字存在两次,a.txt但其中只有一次,b.txt则会从中输出重复的行a.txt。如果您不关心重复项,请使用sort -u FILE代替sort FILE(或者sort FILE | uniq万一您sort没有进行唯一排序的开关)


nu1*_*73R 3

您可以使用该diff命令来比较两个文件

用法示例

$ seq 1 5 > a.txt
$ seq 1 5 > b.txt
$ diff a.txt b.txt
$
$ seq 1 6 > b.txt
$ diff a.txt b.txt
5a6
> 6
Run Code Online (Sandbox Code Playgroud)

编辑

你也可以尝试类似的东西

$ seq 1 5 > a.txt
$ seq 1 5 > b.txt
$ diff a.txt b.txt > /dev/null  && echo files are same || echo files are not same
files are same
$ seq 1 6 > b.txt
$ diff a.txt b.txt > /dev/null  && echo files are same || echo files are not same
files are not same
Run Code Online (Sandbox Code Playgroud)