当第二个文件匹配时打印第一个文件中的模式

当第二个文件匹配时打印第一个文件中的模式

我有这些文件。

文件1.txt

A
B
C
D
E

文件2.txt

A 1
B 2
D 3

我想要的输出如下:

A
B
D

我尝试使用grep -Ff file1.txt file2.txt但结果是

A 1
B 2
D 3

答案1

职位join

join -o 1.1 f1.txt f2.txt

默认情况下,join连接到文件的以空格分隔的第一个字段。-o 1.1指定输出,我们只对第一个文件的第一个字段感兴趣。

如果文件未排序,您需要sort先对它们进行排序:

join -o 1.1 <(sort f1.txt) <(sort f2.txt)

例子:

$ cat f1.txt                    
A
B
C
D
E

$ cat f2.txt                    
A 1
B 2
D 3

$ join -o 1.1 f1.txt f2.txt 
A
B
D

答案2

虽然join比这个容易得多,但您也可以使用以下方法尝试这个awk

awk 'NR==FNR{a[$1]=$1}NR!=FNR && $1 in a{print a[$1]}' file1.txt file2.txt

演示

$ cat file1.txt                    
A
B
C
D
E

$ cat file2.txt                    
A 1
B 2
D 3

$ awk 'NR==FNR{a[$1]=$1}NR!=FNR && $1 in a{print a[$1]}' file1.txt file2.txt
A
B
D

相关内容