2015-06-21 26 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

相關問題