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 2
2番目のファイルの接続フィールドが2であることを示します。
の場合、join
入力は結合フィールドで語彙別にソートする必要があります。まだソートされておらず、シェルがプロセス置換(AT&T ksh、zsh、bash)をサポートしている場合は、次のことができます。
join -2 -2 <(sort -k1,1 file1) <(sort -k2,2 file2)
答え2
他の人が提案したように、grep -Fwf file1 file2が機能するはずです。
ループを使用するには、以下を試してください。
for i in `cat file1`; do grep " "${i}" " file2; done