使用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
谢谢!
使用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
谢谢!
使用更灵活的工具将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中的任何一列,并决定打印任何列而不是打印整行
@EdMorton我错过了。在答案中更新。感谢您指出。 – nu11p01n73R
工作谢谢。 – SMed79
您正在寻找工具'grep'
检查了这一点。
比方说你有file1
& file2
文件输入
grep -f file1 file2
将返回
H
D
A
为什么地球上管道到'awk' ?? 'grep -f file1 file2'是你所需要的。 –
我的错误,谢谢你的指针。 – Fawzan
没问题,这就是为什么没有downvote,只是混淆':p' –
我已经测试过'grep -f',但得到[错误信息](http://stackoverflow.com/questions/30961219/extract-lines-from-file2-already-found-file1#comment49977455_30961263)。 – SMed79