2016-08-02 72 views
1

我有兩個文件,targets.txt和huge.txt。 Huge.txt是一個製表符分隔的文件,其中包含全部數字爲50米的行。 Targets.txt包含一個我想在huge.txt中搜索但只在特定列中搜索的100,000個值(也包括所有數字)的列表。如果我匹配的專欄中,我會得到誤報的原因,我可能有一列以外的對我感興趣的一個號碼匹配grep多個值,但只有一個特定列

我可以使用類似:

awk '$3==someval' huge.txt 

我不因爲它是O(n^2),所以想要給target.txt的大小做一個for循環,並且運行awk很多次>>到輸出文件中。有沒有什麼方法可以使用grep -F,我指示grep只查看第3列?

在輸出中,我想要來自huge.txt的完整行。

回答

1

awk的慣用方式是將小文件存儲在數組中,並在大文件中查找。

例如,

awk -F'\t' 'NR==FNR{a[$1]; next} $3 in a' Target.txt Huge.txt 

100K數字可能會大,你的記憶,如果是的話,你可以分裂Target.txt成塊,這些運行多個和合並的結果。對於現代計算機來說,它不應該是個問題。

+0

有趣的是,這適用於除最後一列以外的所有巨大的.txt列。無論我做什麼,它都拒絕匹配$ NF列中的值。所以如果我這樣做: awk -F'\ t''NR == FNR {a [$ 1]; next} $ NR in'target.txt huge.txt 它永遠不會匹配。但是,如果我用N列替換帶$ 1到$ N-1的$ NR,該代碼正常工作 – ben

+0

'NR'是行號,最後一個字段是'$ NF' – karakfa

+0

錯字 - 謝謝。出於某種原因,我仍然無法與最後一行合作 – ben

相關問題