从File2中找到已找到File1的行

时间:2015-06-21 04:18:04

标签: linux bash

使用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

谢谢!

3 个答案:

答案 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中,如果是,则执行打印整行的默认操作

Awkgrep更灵活,因为file1中的列可以包含文件2中的任何列,并决定打印任何列而不是打印整行

答案 2 :(得分:1)

这是comm实用程序的功能,但您必须先对文件进行排序:获取两个文件之间的共同点:

comm -12 <(sort File1) <(sort File2)