2015-05-09 123 views
0

我有兩個大表格文件file1和file 2.我想比較這兩個文件並打印匹配的行,如下所示。比較兩個製表符分隔文件並打印匹配行

file_1

ENSDARG00000000760
ENSDARG00000001015
ENSDARG00000001549
ENSDARG00000002445
ENSDARG00000003102
ENSDARG00000004594
ENSDARG00000004851

file_2

ENSDARG00000000151 ENSDART00000000160 2292 chovy.60083 ENSDARG00000000151 ENSDART00000151127 1470 chovy.60083 ENSDARG00000000175 ENSDART00000146636 1832 chovy.300567 ENSDARG00000000966 ENSDART00000001092 6325 chovy.254634 ENSDARG00000000966 ENSDART00000140618 6295 chovy.254634 ENSDARG00000001015 ENSDART00000001148 1791 chovy。 388956 ENSDARG00000001015 ENSDART00000104891 1835 chovy.388956 ENSDARG00000001015 ENSDART00000141913 994 chovy.283553

我所需的輸出:

ENSDARG00000001015 ENSDART00000001148 1791 chovy.388956 ENSDARG00000001015 ENSDART00000104891 1835 chovy.388956 ENSDARG00000001015 ENSDART00000141913 994 chovy.283553

我的代碼:

grep -wFf file1.txt file2.txt> output.txt

我認爲它不工作..

感謝您對您的幫助!

+0

這對於awk來說更是一份工作。 –

+0

這應該去http://unix.stackexchange.com/,不是? –

+0

@AbhinavGauniyal:在SO中並沒有太多像這樣的問題(標籤像:'grep','sed','awk','bash' ...這些都是編程語言本身(除了'grep'這更多的是一個命令))。 –

回答

1

你可以試試這個:

awk 'FNR==NR{a[$1]=1;next}a[$1]' file1.txt file2.txt > output.txt 

細節:

FNR==NR是一個條件,測試當前文件的行數等於由AWK處理的當前行號(這是一招要知道你是在第一檔還是在第二檔)。當awk啓動一個新文件FNR(文件編號行)被重置,但NR(編號行)繼續逐行遞增。

{a[$1]=1;next}如果爲true,則將數組「a」的項設置爲鍵爲1的值,並立即轉到下一行。

a[$1]也是一個測試。如果file2的第一個字段是數組「a」中的現有密鑰(理解爲a[$1]不爲空),則會打印該行。

+0

非常感謝您的幫助,它完美的工作。 –

相關問題