2015-06-21 22 views
0

使用linux命令行,我需要输出文本file2中的行,这些行已经在file1中找到。从File2中提取出的行已经找到File1

文件1

C 
A 
G 
E 
B 
D 
H 
F 

文件2

N 
I 
H 
J 
K 
M 
D 
L 
A 

输出

A 
D 
H 

谢谢!

+0

我已经测试过'grep -f',但得到[错误信息](http://stackoverflow.com/questions/30961219/extract-lines-from-file2-already-found-file1#comment49977455_30961263)。 – SMed79

回答

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中的任何一列,并决定打印任何列而不是打印整行

+1

@EdMorton我错过了。在答案中更新。感谢您指出。 – nu11p01n73R

+0

工作谢谢。 – SMed79

5

您正在寻找工具'grep'

检查了这一点。

比方说你有file1 & file2文件输入

grep -f file1 file2 

将返回

H 
D 
A 
+2

为什么地球上管道到'awk' ?? 'grep -f file1 file2'是你所需要的。 –

+0

我的错误,谢谢你的指针。 – Fawzan

+0

没问题,这就是为什么没有downvote,只是混淆':p' –

1

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

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

工作,谢谢。 – SMed79

相关问题