我有一个文件:a.txt每行都有一个数字.我还有另一个文件b.txt,每行也有一个数字.
我如何检查文件中的所有行是否都a.txt包含在内b.txt?
您可以使用comm它。
如果a.txt和b.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没有进行唯一排序的开关)
您可以使用该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)
| 归档时间: |
|
| 查看次数: |
1035 次 |
| 最近记录: |