2017-04-21 4 views
1

私はこれを見て2つのファイルを持っている:2つのファイルの異なる列を比較し、最初のファイルに出力するにはどうすればよいですか?

file1: 

apples 
pears 
grapes 
oranges 
melon 

file2: 

gene1 apples 
gene2 television 
gene3 pears 
gene4 homeless 

所望の出力:

私はFILE2のCOLUMN2とFILE1のcolumn1のを比較するとfile2の行全体をプリントアウトするためにはawkを使用したい
gene1 apples 
gene3 pears 

?これどうやってするの?

+1

これは、約20倍の週を尋ねます。アーカイブを検索するだけです。 –

+1

は 'file1'のフィールド値を収集し、以前に収集された値のいずれかと一致する場合は' file2'のレコードをフィルタリングします – RomanPerekhrest

+0

http://stackoverflow.com/questions/42239179/fastest-way-to-find-lines-of -a-text-file-from-another-larger-text-file-in-bash –

答えて

1

あなたはこのように、FILE2に使用grepの値としてファイル1の各ラインを使用してこれを行うことができます。

cat file1.txt | xargs -I{} sh -c 'cat file2.txt | grep {}' 

あるいはさらに良い:

grep -f file1.txt file2.txt 

注:

最初の例は、注入攻撃に対して脆弱です。つまり、誰かが処理するテキストファイルに悪意のあるbashコマンドを挿入して、それを実行させることができます。 2番目の例ではそうではありません。

2番目の例の主な欠点は、file1の最後に余分なスペースがあると一致しないことです。つまり、"apple""apple "(2番目のリンゴの最後のスペースに注意してください)とは異なる扱いになります。

リソース:

More comprehensive answer

関連する問題