2016-04-08 143 views
0

我有兩個文件得到以下信息。我需要比較FILE2中匹配的文件和打印行。使用awk比較兩個文件並打印匹配的行

FILE1.TXT

martin01 
kevin01 
phoenix01 
samson01 
edward01 

FILE2.TXT

martin01.test.com empid: 9874712 
martin01.test1.com empid:0972292 
kevin01.test.com empid: 3297203 
kevin01.test.com empid: 3297203 
phoenix01.test.com empid: 9872219 
phoenix01.test1.com empid:9803994 
samson01.test.com empid: 0983903 
samson01 empid: 7665758 
edward01.test.com empid: 0979072 
edward01.test2.com empid: 748840 
gregory01.test.com empid: 657758 
clevin01.test.com empid:6589598 

預期的輸出應該是這樣的:

martin01.test.com empid: 9874712 
martin01.test1.com empid:0972292 
kevin01.test.com empid: 3297203 
kevin01.test.com empid: 3297203 
phoenix01.test.com empid: 9872219 
phoenix01.test1.com empid:9803994 
samson01.test.com empid: 0983903 
samson01 empid: 7665758 
edward01.test.com empid: 0979072 
edward01 empid: 748840 

這是我寫的,但它的某處錯誤..

awk 'FNR==NR {a[$1]; next} $1 in a' FILE1.txt FILE2.txt 
+0

爲什麼選擇edward01 empid?它不是edward01.test2.com empid? – 2016-04-08 20:12:18

回答

2

需要將FS設置爲.

awk -F'[.[:space:]]' 'FNR==NR {a[$1]; next} $1 in a' FILE1.txt FILE2.txt 
+0

嗨Ed,我修改了我的問題,因爲我想匹配沒有分隔符的字符串「。」以及 – user3834663

+0

「edward01 EMPID:748840」 – user3834663

+0

它看起來像上面的命令通過輸出這樣 – user3834663

2

替代awk

$ grep -Ff file1 file2 

martin01.test.com empid: 9874712 
martin01.test1.com empid:0972292 
kevin01.test.com empid: 3297203 
kevin01.test.com empid: 3297203 
phoenix01.test.com empid: 9872219 
phoenix01.test1.com empid:9803994 
samson01.test.com empid: 0983903 
samson01 empid: 7665758 
edward01.test.com empid: 0979072 
edward01.test2.com empid: 748840 

注意,這場比賽是在任何地方行,而不是隻限於第一個字段。如果你的領域是不相交的集合,請使用它。

+0

不錯,但它會在file2中的任何位置匹配file1。 – 2016-04-08 20:17:56

+0

是的,因此p.s. note – karakfa

+0

'grep -f <(sed's /^./^&/ g'file1.txt)file2.txt' – 2016-04-08 20:27:01

相關問題