2014-07-16 60 views
0

我有兩列文件。我需要打印第二個文件的內容如果第一個第二個這兩個文件的列是相等的。例如:按兩列匹配比較兩個文件

file1 

Name1 123 blabla 
Name1 456 bla 
Name3 777 s 

file2 

Name1 123 something more 
Name2 456 some words 
Name4 111 no 

Desired output: 

Name1 123 something more 

我寫了這個代碼,但它僅適用於一列(第二次在這種情況下):

awk 'BEGIN{FS=OFS="\t"} NR == FNR {f[$2]; next;} $2 in f{print $0;}' file1 file2 

我發現這裏的東西有關:comparing two columns in two files,但我無法找到正確的方法。我試過,但沒有工作..:提前

awk 'BEGIN{FS=OFS="\t"} NR == FNR {f[$1 FS $2]; next;} if($1 in f && $2 in f){print $0;}' 

感謝,

回答

0

你可以有

awk 'NR == FNR { a[$1, $2]++; next } a[$1, $2]' file1 file2 

輸出:

Name1 123 something more 
  • [$1, $2]不同於[$1 "," $2]。不知何故,Awk的實現可以確保$1, $2不會匹配文字字符串。
+0

它很好。謝謝。一個小問題,只有好奇心,你知道我的代碼爲什麼不起作用嗎? – cucurbit

+0

對於第二次嘗試,您沒有爲'f [$ 1 FS $ 2]'賦值。而且你分別用這兩個值'in's'f'中的$ 1和f'中的$ 2。當然,從來沒有'f [$ 1]'和'f [$ 2]'。在你的版本中,如果(f $中有$ 1 FS $ 2),那麼它可能是'f [$ FS $ 2] ++'...' – konsolebox