使用linux命令行,我需要输出 file1 中已经找到的 file2 文本中的行。
File1中:
C
A
G
E
B
D
H
F
文件2 :
N
I
H
J
K
M
D
L
A
输出:
A
D
H
谢谢!
答案 0 :(得分:5)
您正在寻找工具'grep'
检查一下。
假设您在file1
& file2
个文件
grep -f file1 file2
会回复你
H
D
A
答案 1 :(得分:3)
更灵活的工具是awk
awk 'NR==FNR{lines[$0]++; next} $1 in lines'
示例强>
$ awk 'NR==FNR{lines[$0]++; next} $1 in lines' file1 file2
H
D
A
它的作用是什么?
NR==FNR{lines[$0]++; next}
NR==FNR
检查记录的文件数是否等于记录的总数。这仅适用于第一个文件file1
lines[$0]++
这里我们创建一个关联数组,文件1中的行$0
作为索引。
$0 in lines
此行仅适用于第二个文件,因为之前的操作中为next
。这将检查文件2中的行是否存在于已保存的数组lines
中,如果是,则执行打印整行的默认操作
Awk
比grep
更灵活,因为file1中的列可以包含文件2中的任何列,并决定打印任何列而不是打印整行
答案 2 :(得分:1)
这是comm
实用程序的功能,但您必须先对文件进行排序:获取两个文件之间的共同点:
comm -12 <(sort File1) <(sort File2)