如何编写一个脚本来打印文件中不包含另一个文件的每一行?(Bash 脚本)

如何编写一个脚本来打印文件中不包含另一个文件的每一行?(Bash 脚本)

例如我有2个文本文件:

file1 包括:

a 
b
bb
cc

file2 包括:

aa
bc
ab

输出应该是:

$p1.sh file1 file2 
bb
cc

$p1.sh file2 file1
aa
bc
ab

我该如何编写这个 Bash 脚本?我写了类似这样的脚本,但是不起作用:

#!/bin/bash

cat "$1" | while read m  
do
    grep -f -v "$m" "$2"
done | sort -u

任何形式的指导都将不胜感激!我是一名初级程序员,没有编写脚本的经验。谢谢!

答案1

我认为您需要使用 sort 和 comm 命令来完成这项工作。例如:

comm -23 <(sort -u file1.txt) <(sort -u file2.txt) > file3.txt

我将让您自行使用抑制标志 (-1、-2、-3) 来获得所需的结果。我以 -23 为例。

另一个可能更简单的方法是使用 awk,如下所示:

awk 'FNR==NR{lines[$0]=1;next} !($0 in lines)' file1 file2

相关内容