我有这些文件。
文件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