正確な一致のためにgrepを使用し、他のファイルを見つけるためにリストファイルを使用してください。

正確な一致のためにgrepを使用し、他のファイルを見つけるためにリストファイルを使用してください。

2つのファイルがあります。 1つはID(テキストファイル)を含み、もう1つはIDと説明(タブファイル)を含みます。

ファイル1:

31120
211890
542312

ファイル2:

chr10 31120 A T Descriptions
Chr11 131120 A T Descriptions
chr12 23765090 G C Descriptions
chr15 784930 A G Descriptions 

予想出力:

chr10 31120 A T Descriptions

現在の出力:

Random selected columns some matching the file1 IDs and some not.

grep -f file1 file2 > output.txt私のIDを一致させてfile1情報を抽出するために使用していますfile2。しかし、問題は私のIDが31120のときです。 31120、231120、311200などの私のIDを見つけることができます。

他のファイルからパターンを見つけるためにファイルを実行しているので、31120のみを返すように検索に固有のものを作成するには何を使用できますか?一般的な一行のgrep検索ではこれは簡単ですが、2つのファイルを比較するときにこれを行う方法がわかりません。

試してみましたgrep -F -f file1 file2が効果がありませんでした。

これでgrep -Fwf file1 file2を使用しましたが、機能しません。

ベストアンサー1

-w単語全体に一致するように追加するだけです。パターンがなく固定された文字列があるので-F

$ grep -wFf file1 file2
chr10 31120 A T Descriptions

これはもう一つの良いツールですが、デフォルトでは最初にjoinそのjoinフィールドを印刷してから残りを印刷するので、気に入らないかもしれません。

$ join -2 2 file1 file2
31120 chr10 A T Descriptions

-2 22番目のファイルの接続フィールドが2であることを示します。

の場合、join入力は結合フィールドで語彙別にソートする必要があります。まだソートされておらず、シェルがプロセス置換(AT&T ksh、zsh、bash)をサポートしている場合は、次のことができます。

join -2 -2 <(sort -k1,1 file1) <(sort -k2,2 file2)

おすすめ記事